6b13f685e
김민수
BSP 최초 추가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
#ifndef _LINUX_DIO_H
#define _LINUX_DIO_H
#include <linux/device.h>
#ifdef __KERNEL__
#include <asm/hp300hw.h>
typedef __u16 dio_id;
struct dio_dev {
struct dio_bus *bus;
dio_id id;
int scode;
struct dio_driver *driver;
struct device dev;
u8 ipl;
char name[64];
struct resource resource;
};
#define to_dio_dev(n) container_of(n, struct dio_dev, dev)
struct dio_bus {
struct list_head devices;
unsigned int num_resources;
struct resource resources[2];
struct device dev;
char name[10];
};
extern struct dio_bus dio_bus;
extern struct bus_type dio_bus_type;
struct dio_device_id {
dio_id id;
unsigned long driver_data;
};
struct dio_driver {
struct list_head node;
char *name;
const struct dio_device_id *id_table;
int (*probe)(struct dio_dev *z, const struct dio_device_id *id);
void (*remove)(struct dio_dev *z);
struct device_driver driver;
};
#define to_dio_driver(drv) container_of(drv, struct dio_driver, driver)
#define DIO_IDOFF 0x01 /* primary device ID */
#define DIO_IPLOFF 0x03 /* interrupt priority level */
#define DIO_SECIDOFF 0x15 /* secondary device ID */
#define DIOII_SIZEOFF 0x101 /* device size, DIO-II only */
#define DIO_VIRADDRBASE 0xf0000000UL /* vir addr where IOspace is mapped */
#define DIO_BASE 0x600000 /* start of DIO space */
#define DIO_END 0x1000000 /* end of DIO space */
#define DIO_DEVSIZE 0x10000 /* size of a DIO device */
#define DIOII_BASE 0x01000000 /* start of DIO-II space */
#define DIOII_END 0x20000000 /* end of DIO-II space */
#define DIOII_DEVSIZE 0x00400000 /* size of a DIO-II device */
#define DIO_SCMAX (hp300_model == HP_320 ? 32 : 256)
#define DIOII_SCBASE 132 /* lowest DIO-II select code */
#define DIO_SCINHOLE(scode) (((scode) >= 32) && ((scode) < DIOII_SCBASE))
#define DIO_ISDIOII(scode) ((scode) >= 132 && (scode) < 256)
#define DIO_ID(baseaddr) in_8((baseaddr) + DIO_IDOFF)
#define DIO_SECID(baseaddr) in_8((baseaddr) + DIO_SECIDOFF)
#define DIO_IPL(baseaddr) (((in_8((baseaddr) + DIO_IPLOFF) >> 4) & 0x03) + 3)
#define DIOII_SIZE(baseaddr) ((in_8((baseaddr) + DIOII_SIZEOFF) + 1) * 0x100000)
#define DIO_SIZE(scode, base) (DIO_ISDIOII((scode)) ? DIOII_SIZE((base)) : DIO_DEVSIZE)
#define DIO_ENCODE_ID(pr,sec) ((((int)sec & 0xff) << 8) | ((int)pr & 0xff))
#define DIO_NEEDSSECID(id) ((id) == DIO_ID_FBUFFER)
#define DIO_WILDCARD 0xff
#define DIO_ID_DCA0 0x02 /* 98644A serial */
#define DIO_DESC_DCA0 "98644A DCA0 serial"
#define DIO_ID_DCA0REM 0x82 /* 98644A serial */
#define DIO_DESC_DCA0REM "98644A DCA0REM serial"
#define DIO_ID_DCA1 0x42 /* 98644A serial */
#define DIO_DESC_DCA1 "98644A DCA1 serial"
#define DIO_ID_DCA1REM 0xc2 /* 98644A serial */
#define DIO_DESC_DCA1REM "98644A DCA1REM serial"
#define DIO_ID_DCM 0x05 /* 98642A serial MUX */
#define DIO_DESC_DCM "98642A DCM serial MUX"
#define DIO_ID_DCMREM 0x85 /* 98642A serial MUX */
#define DIO_DESC_DCMREM "98642A DCMREM serial MUX"
#define DIO_ID_LAN 0x15 /* 98643A LAN */
#define DIO_DESC_LAN "98643A LANCE ethernet"
#define DIO_ID_FHPIB 0x08 /* 98625A/98625B fast HP-IB */
#define DIO_DESC_FHPIB "98625A/98625B fast HPIB"
#define DIO_ID_NHPIB 0x01 /* 98624A HP-IB (normal ie slow) */
#define DIO_DESC_NHPIB "98624A HPIB"
#define DIO_ID_SCSI0 0x07 /* 98265A SCSI */
#define DIO_DESC_SCSI0 "98265A SCSI0"
#define DIO_ID_SCSI1 0x27 /* ditto */
#define DIO_DESC_SCSI1 "98265A SCSI1"
#define DIO_ID_SCSI2 0x47 /* ditto */
#define DIO_DESC_SCSI2 "98265A SCSI2"
#define DIO_ID_SCSI3 0x67 /* ditto */
#define DIO_DESC_SCSI3 "98265A SCSI3"
#define DIO_ID_FBUFFER 0x39 /* framebuffer: flavour is distinguished by secondary ID */
#define DIO_DESC_FBUFFER "bitmapped display"
#define DIO_ID_MISC0 0x03 /* 98622A */
#define DIO_DESC_MISC0 "98622A"
#define DIO_ID_MISC1 0x04 /* 98623A */
#define DIO_DESC_MISC1 "98623A"
#define DIO_ID_PARALLEL 0x06 /* internal parallel */
#define DIO_DESC_PARALLEL "internal parallel"
#define DIO_ID_MISC2 0x09 /* 98287A keyboard */
#define DIO_DESC_MISC2 "98287A keyboard"
#define DIO_ID_MISC3 0x0a /* HP98635A FP accelerator */
#define DIO_DESC_MISC3 "HP98635A FP accelerator"
#define DIO_ID_MISC4 0x0b /* timer */
#define DIO_DESC_MISC4 "timer"
#define DIO_ID_MISC5 0x12 /* 98640A */
#define DIO_DESC_MISC5 "98640A"
#define DIO_ID_MISC6 0x16 /* 98659A */
#define DIO_DESC_MISC6 "98659A"
#define DIO_ID_MISC7 0x19 /* 237 display */
#define DIO_DESC_MISC7 "237 display"
#define DIO_ID_MISC8 0x1a /* quad-wide card */
#define DIO_DESC_MISC8 "quad-wide card"
#define DIO_ID_MISC9 0x1b /* 98253A */
#define DIO_DESC_MISC9 "98253A"
#define DIO_ID_MISC10 0x1c /* 98627A */
#define DIO_DESC_MISC10 "98253A"
#define DIO_ID_MISC11 0x1d /* 98633A */
#define DIO_DESC_MISC11 "98633A"
#define DIO_ID_MISC12 0x1e /* 98259A */
#define DIO_DESC_MISC12 "98259A"
#define DIO_ID_MISC13 0x1f /* 8741 */
#define DIO_DESC_MISC13 "8741"
#define DIO_ID_VME 0x31 /* 98577A VME adapter */
#define DIO_DESC_VME "98577A VME adapter"
#define DIO_ID_DCL 0x34 /* 98628A serial */
#define DIO_DESC_DCL "98628A DCL serial"
#define DIO_ID_DCLREM 0xb4 /* 98628A serial */
#define DIO_DESC_DCLREM "98628A DCLREM serial"
#define DIO_ID2_GATORBOX 0x01 /* 98700/98710 "gatorbox" */
#define DIO_DESC2_GATORBOX "98700/98710 \"gatorbox\" display"
#define DIO_ID2_TOPCAT 0x02 /* 98544/98545/98547 "topcat" */
#define DIO_DESC2_TOPCAT "98544/98545/98547 \"topcat\" display"
#define DIO_ID2_RENAISSANCE 0x04 /* 98720/98721 "renaissance" */
#define DIO_DESC2_RENAISSANCE "98720/98721 \"renaissance\" display"
#define DIO_ID2_LRCATSEYE 0x05 /* lowres "catseye" */
#define DIO_DESC2_LRCATSEYE "low-res catseye display"
#define DIO_ID2_HRCCATSEYE 0x06 /* highres colour "catseye" */
#define DIO_DESC2_HRCCATSEYE "high-res color catseye display"
#define DIO_ID2_HRMCATSEYE 0x07 /* highres mono "catseye" */
#define DIO_DESC2_HRMCATSEYE "high-res mono catseye display"
#define DIO_ID2_DAVINCI 0x08 /* 98730/98731 "davinci" */
#define DIO_DESC2_DAVINCI "98730/98731 \"davinci\" display"
#define DIO_ID2_XXXCATSEYE 0x09 /* "catseye" */
#define DIO_DESC2_XXXCATSEYE "catseye display"
#define DIO_ID2_HYPERION 0x0e /* A1096A "hyperion" */
#define DIO_DESC2_HYPERION "A1096A \"hyperion\" display"
#define DIO_ID2_XGENESIS 0x0b /* "x-genesis"; no NetBSD support */
#define DIO_DESC2_XGENESIS "\"x-genesis\" display"
#define DIO_ID2_TIGER 0x0c /* "tiger"; no NetBSD support */
#define DIO_DESC2_TIGER "\"tiger\" display"
#define DIO_ID2_YGENESIS 0x0d /* "y-genesis"; no NetBSD support */
#define DIO_DESC2_YGENESIS "\"y-genesis\" display"
extern int dio_find(int deviceid);
extern unsigned long dio_scodetophysaddr(int scode);
extern int dio_create_sysfs_dev_files(struct dio_dev *);
extern int dio_register_driver(struct dio_driver *);
extern void dio_unregister_driver(struct dio_driver *);
extern const struct dio_device_id *dio_match_device(const struct dio_device_id *ids, const struct dio_dev *z);
static inline struct dio_driver *dio_dev_driver(const struct dio_dev *d)
{
return d->driver;
}
#define dio_resource_start(d) ((d)->resource.start)
#define dio_resource_end(d) ((d)->resource.end)
#define dio_resource_len(d) (resource_size(&(d)->resource))
#define dio_resource_flags(d) ((d)->resource.flags)
#define dio_request_device(d, name) \
request_mem_region(dio_resource_start(d), dio_resource_len(d), name)
#define dio_release_device(d) \
release_mem_region(dio_resource_start(d), dio_resource_len(d))
static inline void *dio_get_drvdata (struct dio_dev *d)
{
return dev_get_drvdata(&d->dev);
}
static inline void dio_set_drvdata (struct dio_dev *d, void *data)
{
dev_set_drvdata(&d->dev, data);
}
#endif /* __KERNEL__ */
#endif /* ndef _LINUX_DIO_H */
|