October 7, 2001 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

```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

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)