Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/gpib/hp_82341/hp_82341.h
38185 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
3
/***************************************************************************
4
* copyright : (C) 2002, 2005 by Frank Mori Hess *
5
***************************************************************************/
6
7
#include "tms9914.h"
8
#include "gpibP.h"
9
10
enum hp_82341_hardware_version {
11
HW_VERSION_UNKNOWN,
12
HW_VERSION_82341C,
13
HW_VERSION_82341D,
14
};
15
16
// struct which defines private_data for board
17
struct hp_82341_priv {
18
struct tms9914_priv tms9914_priv;
19
unsigned int irq;
20
unsigned short config_control_bits;
21
unsigned short mode_control_bits;
22
unsigned short event_status_bits;
23
struct pnp_dev *pnp_dev;
24
unsigned long iobase[4];
25
unsigned long io_region_offset;
26
enum hp_82341_hardware_version hw_version;
27
};
28
29
static const int hp_82341_region_iosize = 0x8;
30
static const int hp_82341_num_io_regions = 4;
31
static const int hp_82341_fifo_size = 0xffe;
32
static const int hp_82341c_firmware_length = 5764;
33
static const int hp_82341d_firmware_length = 5302;
34
35
// hp 82341 register offsets
36
enum hp_82341_region_0_registers {
37
CONFIG_CONTROL_STATUS_REG = 0x0,
38
MODE_CONTROL_STATUS_REG = 0x1,
39
MONITOR_REG = 0x2, // after initialization
40
XILINX_DATA_REG = 0x2, // before initialization, write only
41
INTERRUPT_ENABLE_REG = 0x3,
42
EVENT_STATUS_REG = 0x4,
43
EVENT_ENABLE_REG = 0x5,
44
STREAM_STATUS_REG = 0x7,
45
};
46
47
enum hp_82341_region_1_registers {
48
ID0_REG = 0x2,
49
ID1_REG = 0x3,
50
TRANSFER_COUNT_LOW_REG = 0x4,
51
TRANSFER_COUNT_MID_REG = 0x5,
52
TRANSFER_COUNT_HIGH_REG = 0x6,
53
};
54
55
enum hp_82341_region_3_registers {
56
BUFFER_PORT_LOW_REG = 0x0,
57
BUFFER_PORT_HIGH_REG = 0x1,
58
ID2_REG = 0x2,
59
ID3_REG = 0x3,
60
BUFFER_FLUSH_REG = 0x4,
61
BUFFER_CONTROL_REG = 0x7
62
};
63
64
enum config_control_status_bits {
65
IRQ_SELECT_MASK = 0x7,
66
DMA_CONFIG_MASK = 0x18,
67
ENABLE_DMA_CONFIG_BIT = 0x20,
68
XILINX_READY_BIT = 0x40, // read only
69
DONE_PGL_BIT = 0x80
70
};
71
72
static inline unsigned int IRQ_SELECT_BITS(int irq)
73
{
74
switch (irq) {
75
case 3:
76
return 0x3;
77
case 5:
78
return 0x2;
79
case 7:
80
return 0x1;
81
case 9:
82
return 0x0;
83
case 10:
84
return 0x7;
85
case 11:
86
return 0x6;
87
case 12:
88
return 0x5;
89
case 15:
90
return 0x4;
91
default:
92
return 0x0;
93
}
94
};
95
96
enum mode_control_status_bits {
97
SLOT8_BIT = 0x1, // read only
98
ACTIVE_CONTROLLER_BIT = 0x2, // read only
99
ENABLE_DMA_BIT = 0x4,
100
SYSTEM_CONTROLLER_BIT = 0x8,
101
MONITOR_BIT = 0x10,
102
ENABLE_IRQ_CONFIG_BIT = 0x20,
103
ENABLE_TI_STREAM_BIT = 0x40
104
};
105
106
enum monitor_bits {
107
MONITOR_INTERRUPT_PENDING_BIT = 0x1, // read only
108
MONITOR_CLEAR_HOLDOFF_BIT = 0x2, // write only
109
MONITOR_PPOLL_BIT = 0x4, // write clear
110
MONITOR_SRQ_BIT = 0x8, // write clear
111
MONITOR_IFC_BIT = 0x10, // write clear
112
MONITOR_REN_BIT = 0x20, // write clear
113
MONITOR_END_BIT = 0x40, // write clear
114
MONITOR_DAV_BIT = 0x80 // write clear
115
};
116
117
enum interrupt_enable_bits {
118
ENABLE_TI_INTERRUPT_BIT = 0x1,
119
ENABLE_POINTERS_EQUAL_INTERRUPT_BIT = 0x4,
120
ENABLE_BUFFER_END_INTERRUPT_BIT = 0x10,
121
ENABLE_TERMINAL_COUNT_INTERRUPT_BIT = 0x20,
122
ENABLE_DMA_TERMINAL_COUNT_INTERRUPT_BIT = 0x80,
123
};
124
125
enum event_status_bits {
126
TI_INTERRUPT_EVENT_BIT = 0x1, // write clear
127
INTERRUPT_PENDING_EVENT_BIT = 0x2, // read only
128
POINTERS_EQUAL_EVENT_BIT = 0x4, // write clear
129
BUFFER_END_EVENT_BIT = 0x10, // write clear
130
TERMINAL_COUNT_EVENT_BIT = 0x20, // write clear
131
DMA_TERMINAL_COUNT_EVENT_BIT = 0x80, // write clear
132
};
133
134
enum event_enable_bits {
135
ENABLE_TI_INTERRUPT_EVENT_BIT = 0x1, // write clear
136
ENABLE_POINTERS_EQUAL_EVENT_BIT = 0x4, // write clear
137
ENABLE_BUFFER_END_EVENT_BIT = 0x10, // write clear
138
ENABLE_TERMINAL_COUNT_EVENT_BIT = 0x20, // write clear
139
ENABLE_DMA_TERMINAL_COUNT_EVENT_BIT = 0x80, // write clear
140
};
141
142
enum stream_status_bits {
143
HALTED_STATUS_BIT = 0x1, // read
144
RESTART_STREAM_BIT = 0x1 // write
145
};
146
147
enum buffer_control_bits {
148
DIRECTION_GPIB_TO_HOST_BIT = 0x20, // transfer direction (set for gpib to host)
149
ENABLE_TI_BUFFER_BIT = 0x40, // enable fifo
150
FAST_WR_EN_BIT = 0x80, // 350 ns t1 delay?
151
};
152
153
// registers accessible through isapnp chip on 82341d
154
enum hp_82341d_pnp_registers {
155
PIO_DATA_REG = 0x20, // read/write pio data lines
156
PIO_DIRECTION_REG = 0x21, // set pio data line directions (set for input)
157
};
158
159
enum hp_82341d_pnp_pio_bits {
160
HP_82341D_XILINX_READY_BIT = 0x1,
161
HP_82341D_XILINX_DONE_BIT = 0x2,
162
// use register layout compatible with C and older versions instead of 32 contiguous ioports
163
HP_82341D_LEGACY_MODE_BIT = 0x4,
164
HP_82341D_NOT_PROG_BIT = 0x8, // clear to reinitialize xilinx
165
};
166
167