TC(9) | 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 <sys/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 properties. 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 autoconfiguration, 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. Support is provided by the standard bus_dma(9) interface.

# CODE REFERENCES

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)

October 7, 2001 | NetBSD 9.3