| 1 | |
| 2 | * Interface to the TURBOchannel related routines.
|
| 3 | *
|
| 4 | * Copyright (c) 1998 Harald Koerfgen
|
| 5 | * Copyright (c) 2005 James Simmons
|
| 6 | * Copyright (c) 2006 Maciej W. Rozycki
|
| 7 | *
|
| 8 | * Based on:
|
| 9 | *
|
| 10 | * "TURBOchannel Firmware Specification", EK-TCAAD-FS-004
|
| 11 | *
|
| 12 | * from Digital Equipment Corporation.
|
| 13 | *
|
| 14 | * This file is subject to the terms and conditions of the GNU
|
| 15 | * General Public License. See the file "COPYING" in the main
|
| 16 | * directory of this archive for more details.
|
| 17 |
|
| 18 | #ifndef _LINUX_TC_H
|
| 19 | #define _LINUX_TC_H
|
| 20 |
|
| 21 | #include <linux/compiler.h>
|
| 22 | #include <linux/device.h>
|
| 23 | #include <linux/ioport.h>
|
| 24 | #include <linux/types.h>
|
| 25 |
|
| 26 | |
| 27 | * Offsets for the ROM header locations for TURBOchannel cards.
|
| 28 |
|
| 29 | #define TC_OLDCARD 0x3c0000
|
| 30 | #define TC_NEWCARD 0x000000
|
| 31 |
|
| 32 | #define TC_ROM_WIDTH 0x3e0
|
| 33 | #define TC_ROM_STRIDE 0x3e4
|
| 34 | #define TC_ROM_SIZE 0x3e8
|
| 35 | #define TC_SLOT_SIZE 0x3ec
|
| 36 | #define TC_PATTERN0 0x3f0
|
| 37 | #define TC_PATTERN1 0x3f4
|
| 38 | #define TC_PATTERN2 0x3f8
|
| 39 | #define TC_PATTERN3 0x3fc
|
| 40 | #define TC_FIRM_VER 0x400
|
| 41 | #define TC_VENDOR 0x420
|
| 42 | #define TC_MODULE 0x440
|
| 43 | #define TC_FIRM_TYPE 0x460
|
| 44 | #define TC_FLAGS 0x470
|
| 45 | #define TC_ROM_OBJECTS 0x480
|
| 46 |
|
| 47 | |
| 48 | * Information obtained through the get_tcinfo() PROM call.
|
| 49 |
|
| 50 | struct tcinfo {
|
| 51 | s32 revision;
|
| 52 | s32 clk_period;
|
| 53 | s32 slot_size;
|
| 54 | s32 io_timeout;
|
| 55 | s32 dma_range;
|
| 56 | s32 max_dma_burst;
|
| 57 | s32 parity;
|
| 58 | s32 reserved[4];
|
| 59 | };
|
| 60 |
|
| 61 | |
| 62 | * TURBOchannel bus.
|
| 63 |
|
| 64 | struct tc_bus {
|
| 65 | struct list_head devices;
|
| 66 | struct resource resource[2];
|
| 67 |
|
| 68 | struct device dev;
|
| 69 | char name[13];
|
| 70 | resource_size_t slot_base;
|
| 71 | resource_size_t ext_slot_base;
|
| 72 | resource_size_t ext_slot_size;
|
| 73 | int num_tcslots;
|
| 74 | struct tcinfo info;
|
| 75 | };
|
| 76 |
|
| 77 | |
| 78 | * TURBOchannel device.
|
| 79 |
|
| 80 | struct tc_dev {
|
| 81 | struct list_head node;
|
| 82 | struct tc_bus *bus;
|
| 83 | struct tc_driver *driver; |
| 84 | device.
|
| 85 | struct device dev;
|
| 86 | struct resource resource;
|
| 87 | u64 dma_mask;
|
| 88 | char vendor[9];
|
| 89 | char name[9];
|
| 90 | char firmware[9];
|
| 91 | int interrupt;
|
| 92 | int slot;
|
| 93 | };
|
| 94 |
|
| 95 | #define to_tc_dev(n) container_of(n, struct tc_dev, dev)
|
| 96 |
|
| 97 | struct tc_device_id {
|
| 98 | char vendor[9];
|
| 99 | char name[9];
|
| 100 | };
|
| 101 |
|
| 102 | |
| 103 | * TURBOchannel driver.
|
| 104 |
|
| 105 | struct tc_driver {
|
| 106 | struct list_head node;
|
| 107 | const struct tc_device_id *id_table;
|
| 108 | struct device_driver driver;
|
| 109 | };
|
| 110 |
|
| 111 | #define to_tc_driver(drv) container_of(drv, struct tc_driver, driver)
|
| 112 |
|
| 113 | |
| 114 | * Return TURBOchannel clock frequency in Hz.
|
| 115 |
|
| 116 | static inline unsigned long tc_get_speed(struct tc_bus *tbus)
|
| 117 | {
|
| 118 | return 100000 * (10000 / (unsigned long)tbus->info.clk_period);
|
| 119 | }
|
| 120 |
|
| 121 | #ifdef CONFIG_TC
|
| 122 |
|
| 123 | extern struct bus_type tc_bus_type;
|
| 124 |
|
| 125 | extern int tc_register_driver(struct tc_driver *tdrv);
|
| 126 | extern void tc_unregister_driver(struct tc_driver *tdrv);
|
| 127 |
|
| 128 | #else
|
| 129 |
|
| 130 | static inline int tc_register_driver(struct tc_driver *tdrv) { return 0; }
|
| 131 | static inline void tc_unregister_driver(struct tc_driver *tdrv) { }
|
| 132 |
|
| 133 | #endif
|
| 134 |
|
| 135 | |
| 136 | * These have to be provided by the architecture.
|
| 137 |
|
| 138 | extern int tc_preadb(u8 *valp, void __iomem *addr);
|
| 139 | extern int tc_bus_get_info(struct tc_bus *tbus);
|
| 140 | extern void tc_device_get_irq(struct tc_dev *tdev);
|
| 141 |
|
| 142 | #endif
|