TC(9)                  NetBSD Kernel Developer's Manual                  TC(9)

NAME
     TC, tc_intr_establish, tc_intr_disestablish, tc_intr_evcnt.  tc_mb,
     tc_wmb, tc_syncbus, tc_badaddr, TC_DENSE_TO_SPARSE, TC_PHYS_TO_UNCACHED
     -- TURBOchannel bus

SYNOPSIS
     #include <machine/bus.h>
     #include <dev/tc/tcvar.h>
     #include <dev/tc/tcdevs.h>

     void
     tc_intr_establish(struct device *dev, void *cookie, int level,
         int (*handler)(void *), void *arg);

     void
     tc_intr_disestablish(struct device *dev, void *cookie);

     const struct evcnt *
     tc_intr_evcnt(struct device *dev, void *cookie);

     void
     tc_mb();

     void
     tc_wmb();

     void
     tc_syncbus();

     int
     tc_badaddr(tc_addr_t tcaddr);

     tc_addr_t
     TC_DENSE_TO_SPARSE(tc_addr_t addr);

     tc_addr_t
     TC_PHYS_TO_UNCACHED(tc_addr_t addr);

DESCRIPTION
     The TC device provides support for the DEC TURBOchannel bus found on all
     DEC TURBOchannel machines with MIPS (DECstation 5000 series, excluding
     the 5000/200) and Alpha (3000-series) systems.  TURBOchannel is a 32-bit
     wide synchronous DMA-capable bus, running at 25 MHz on higher-end
     machines and at 12.5 MHz on lower-end machines.

DATA TYPES
     Drivers for devices attached to the TURBOchannel bus will make use of the
     following data types:

     struct tc_attach_args
              A structure use to inform the driver of TURBOchannel bus proper-
              ties.  It contains the following members:

                      bus_space_tag_t ta_memt;
                      bus_dma_tag_t   ta_dmat;
                      char            ta_modname[TC_ROM_LLEN+1];
                      u_int           ta_slot;
                      tc_offset_t     ta_offset;
                      tc_addr_t       ta_addr;
                      void            *ta_cookie;
                      u_int           ta_busspeed;

              The ta_busspeed member specifies the TURBOchannel bus speed and
              is useful for time-related functions.  Values values are
              TC_SPEED_12_5_MHZ for the 12.5 MHz bus and TC_SPEED_25_MHZ for
              the 50 MHz bus.

FUNCTIONS
     tc_intr_establish(dev, cookie, level, handler, arg)
              Establish an interrupt handler with device dev for the interrupt
              described completely by cookie, the value passed to the driver
              in the ta_cookie member of the tc_attach_args structure.  The
              priority of the interrupt is specified by level.  When the
              interrupt occurs the function handler is called with argument
              arg.

     tc_intr_disestablish(dev, cookie)
              Dis-establish the interrupt handler with device dev for the
              interrupt described completely cookie.

     tc_intr_evcnt(dev, cookie)
              Do interrupt event counting with device dev for the event
              described completely by cookie.

     tc_mb()  A read/write memory barrier.  Any CPU-to-memory reads/writes
              before the barrier must complete before any CPU-to-memory
              reads/writes after it.

     tc_wmb()
              A write memory barrier.  Any CPU-to-memory writes before the
              barrier must complete before any CPU-to-memory writes after it.

     tc_syncbus()
              Synchronise writes on the TURBOchannel bus by ensuring CPU
              writes are propagated across the TURBOchannel bus.

     tc_badaddr(tcaddr)
              Returns non-zero if the given address tcaddr is invalid.

     TC_DENSE_TO_SPARSE(addr)
              Convert the given physical address addr in TURBOchannel dense
              space to the corresponding address in TURBOchannel sparse space.

     TC_PHYS_TO_UNCACHED(addr)
              Convert the given system memory physical address addr to the
              physical address of the corresponding region that is not cached.

AUTOCONFIGURATION
     The TURBOchannel bus is a direct-connection bus.  During autoconfigura-
     tion, the parent specifies the name of the found TURBOchannel module into
     the ta_modname member of the tc_attach_args structure.  Drivers should
     match on this name.

DMA SUPPORT
     The TURBOchannel bus supports 32-bit, bidirectional DMA transfers.  Sup-
     port is provided by the standard bus_dma(9) interface.

CODE REFERENCES
     This section describes places within the NetBSD source tree where actual
     code implementing or using the machine-independent TURBOchannel subsystem
     can be found.  All pathnames are relative to /usr/src.

     The TURBOchannel subsystem itself is implemented within the file
     sys/dev/tc/tc_subr.c.  Machine-dependent portions can be found in
     sys/arch/<arch>/tc/tcbus.c.

SEE ALSO
     tc(4), autoconf(9), bus_dma(9), bus_space(9), driver(9)

NetBSD 5.0_STABLE               October 7, 2001              NetBSD 5.0_STABLE
