1#ifndef _GDTH_H
2#define _GDTH_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/version.h>
17#include <linux/types.h>
18
19#ifndef TRUE
20#define TRUE 1
21#endif
22#ifndef FALSE
23#define FALSE 0
24#endif
25
26
27
28
29#define GDTH_VERSION_STR "3.04"
30#define GDTH_VERSION 3
31#define GDTH_SUBVERSION 4
32
33
34#define PROTOCOL_VERSION 1
35
36
37#define OEM_ID_ICP 0x941c
38#define OEM_ID_INTEL 0x8000
39
40
41#define GDT_ISA 0x01
42#define GDT_EISA 0x02
43#define GDT_PCI 0x03
44#define GDT_PCINEW 0x04
45#define GDT_PCIMPR 0x05
46
47#define GDT3_ID 0x0130941c
48#define GDT3A_ID 0x0230941c
49#define GDT3B_ID 0x0330941c
50
51#define GDT2_ID 0x0120941c
52
53
54
55#ifndef PCI_VENDOR_ID_VORTEX
56#define PCI_VENDOR_ID_VORTEX 0x1119
57#endif
58#ifndef PCI_VENDOR_ID_INTEL
59#define PCI_VENDOR_ID_INTEL 0x8086
60#endif
61
62#ifndef PCI_DEVICE_ID_VORTEX_GDT60x0
63
64#define PCI_DEVICE_ID_VORTEX_GDT60x0 0
65#define PCI_DEVICE_ID_VORTEX_GDT6000B 1
66
67#define PCI_DEVICE_ID_VORTEX_GDT6x10 2
68#define PCI_DEVICE_ID_VORTEX_GDT6x20 3
69#define PCI_DEVICE_ID_VORTEX_GDT6530 4
70#define PCI_DEVICE_ID_VORTEX_GDT6550 5
71
72#define PCI_DEVICE_ID_VORTEX_GDT6x17 6
73#define PCI_DEVICE_ID_VORTEX_GDT6x27 7
74#define PCI_DEVICE_ID_VORTEX_GDT6537 8
75#define PCI_DEVICE_ID_VORTEX_GDT6557 9
76
77#define PCI_DEVICE_ID_VORTEX_GDT6x15 10
78#define PCI_DEVICE_ID_VORTEX_GDT6x25 11
79#define PCI_DEVICE_ID_VORTEX_GDT6535 12
80#define PCI_DEVICE_ID_VORTEX_GDT6555 13
81#endif
82
83#ifndef PCI_DEVICE_ID_VORTEX_GDT6x17RP
84
85#define PCI_DEVICE_ID_VORTEX_GDT6x17RP 0x100
86#define PCI_DEVICE_ID_VORTEX_GDT6x27RP 0x101
87#define PCI_DEVICE_ID_VORTEX_GDT6537RP 0x102
88#define PCI_DEVICE_ID_VORTEX_GDT6557RP 0x103
89
90#define PCI_DEVICE_ID_VORTEX_GDT6x11RP 0x104
91#define PCI_DEVICE_ID_VORTEX_GDT6x21RP 0x105
92#endif
93#ifndef PCI_DEVICE_ID_VORTEX_GDT6x17RD
94
95#define PCI_DEVICE_ID_VORTEX_GDT6x17RD 0x110
96#define PCI_DEVICE_ID_VORTEX_GDT6x27RD 0x111
97#define PCI_DEVICE_ID_VORTEX_GDT6537RD 0x112
98#define PCI_DEVICE_ID_VORTEX_GDT6557RD 0x113
99
100#define PCI_DEVICE_ID_VORTEX_GDT6x11RD 0x114
101#define PCI_DEVICE_ID_VORTEX_GDT6x21RD 0x115
102
103#define PCI_DEVICE_ID_VORTEX_GDT6x18RD 0x118
104
105#define PCI_DEVICE_ID_VORTEX_GDT6x28RD 0x119
106
107#define PCI_DEVICE_ID_VORTEX_GDT6x38RD 0x11A
108#define PCI_DEVICE_ID_VORTEX_GDT6x58RD 0x11B
109
110#define PCI_DEVICE_ID_VORTEX_GDT7x18RN 0x168
111
112#define PCI_DEVICE_ID_VORTEX_GDT7x28RN 0x169
113
114#define PCI_DEVICE_ID_VORTEX_GDT7x38RN 0x16A
115#define PCI_DEVICE_ID_VORTEX_GDT7x58RN 0x16B
116#endif
117
118#ifndef PCI_DEVICE_ID_VORTEX_GDT6x19RD
119
120#define PCI_DEVICE_ID_VORTEX_GDT6x19RD 0x210
121#define PCI_DEVICE_ID_VORTEX_GDT6x29RD 0x211
122
123#define PCI_DEVICE_ID_VORTEX_GDT7x19RN 0x260
124#define PCI_DEVICE_ID_VORTEX_GDT7x29RN 0x261
125#endif
126
127#ifndef PCI_DEVICE_ID_VORTEX_GDTMAXRP
128
129#define PCI_DEVICE_ID_VORTEX_GDTMAXRP 0x2ff
130#endif
131
132#ifndef PCI_DEVICE_ID_VORTEX_GDTNEWRX
133
134#define PCI_DEVICE_ID_VORTEX_GDTNEWRX 0x300
135#endif
136
137#ifndef PCI_DEVICE_ID_VORTEX_GDTNEWRX2
138
139#define PCI_DEVICE_ID_VORTEX_GDTNEWRX2 0x301
140#endif
141
142#ifndef PCI_DEVICE_ID_INTEL_SRC
143
144#define PCI_DEVICE_ID_INTEL_SRC 0x600
145#endif
146
147#ifndef PCI_DEVICE_ID_INTEL_SRC_XSCALE
148
149#define PCI_DEVICE_ID_INTEL_SRC_XSCALE 0x601
150#endif
151
152
153#define GDTH_SCRATCH PAGE_SIZE
154#define GDTH_MAXCMDS 120
155#define GDTH_MAXC_P_L 16
156#define GDTH_MAX_RAW 2
157#define MAXOFFSETS 128
158#define MAXHA 16
159#define MAXID 127
160#define MAXLUN 8
161#define MAXBUS 6
162#define MAX_EVENTS 100
163#define MAX_RES_ARGS 40
164
165#define MAXCYLS 1024
166#define HEADS 64
167#define SECS 32
168#define MEDHEADS 127
169#define MEDSECS 63
170#define BIGHEADS 255
171#define BIGSECS 63
172
173
174#define UNUSED_CMND ((Scsi_Cmnd *)-1)
175#define INTERNAL_CMND ((Scsi_Cmnd *)-2)
176#define SCREEN_CMND ((Scsi_Cmnd *)-3)
177#define SPECIAL_SCP(p) (p==UNUSED_CMND || p==INTERNAL_CMND || p==SCREEN_CMND)
178
179
180#define SCSIRAWSERVICE 3
181#define CACHESERVICE 9
182#define SCREENSERVICE 11
183
184
185#define MSG_INV_HANDLE -1
186#define MSGLEN 16
187#define MSG_SIZE 34
188#define MSG_REQUEST 0
189
190
191#define SECTOR_SIZE 0x200
192
193
194#define DPMEM_MAGIC 0xC0FFEE11
195#define IC_HEADER_BYTES 48
196#define IC_QUEUE_BYTES 4
197#define DPMEM_COMMAND_OFFSET IC_HEADER_BYTES+IC_QUEUE_BYTES*MAXOFFSETS
198
199
200#define CLUSTER_DRIVE 1
201#define CLUSTER_MOUNTED 2
202#define CLUSTER_RESERVED 4
203#define CLUSTER_RESERVE_STATE (CLUSTER_DRIVE|CLUSTER_MOUNTED|CLUSTER_RESERVED)
204
205
206#define GDT_INIT 0
207#define GDT_READ 1
208#define GDT_WRITE 2
209#define GDT_INFO 3
210#define GDT_FLUSH 4
211#define GDT_IOCTL 5
212#define GDT_DEVTYPE 9
213#define GDT_MOUNT 10
214#define GDT_UNMOUNT 11
215#define GDT_SET_FEAT 12
216#define GDT_GET_FEAT 13
217#define GDT_WRITE_THR 16
218#define GDT_READ_THR 17
219#define GDT_EXT_INFO 18
220#define GDT_RESET 19
221#define GDT_RESERVE_DRV 20
222#define GDT_RELEASE_DRV 21
223#define GDT_CLUST_INFO 22
224#define GDT_RW_ATTRIBS 23
225#define GDT_CLUST_RESET 24
226#define GDT_FREEZE_IO 25
227#define GDT_UNFREEZE_IO 26
228#define GDT_X_INIT_HOST 29
229#define GDT_X_INFO 30
230
231
232#define GDT_RESERVE 14
233#define GDT_RELEASE 15
234#define GDT_RESERVE_ALL 16
235#define GDT_RELEASE_ALL 17
236#define GDT_RESET_BUS 18
237#define GDT_SCAN_START 19
238#define GDT_SCAN_END 20
239#define GDT_X_INIT_RAW 21
240
241
242#define GDT_REALTIME 3
243#define GDT_X_INIT_SCR 4
244
245
246#define SCSI_DR_INFO 0x00
247#define SCSI_CHAN_CNT 0x05
248#define SCSI_DR_LIST 0x06
249#define SCSI_DEF_CNT 0x15
250#define DSK_STATISTICS 0x4b
251#define IOCHAN_DESC 0x5d
252#define IOCHAN_RAW_DESC 0x5e
253#define L_CTRL_PATTERN 0x20000000L
254#define ARRAY_INFO 0x12
255#define ARRAY_DRV_LIST 0x0f
256#define ARRAY_DRV_LIST2 0x34
257#define LA_CTRL_PATTERN 0x10000000L
258#define CACHE_DRV_CNT 0x01
259#define CACHE_DRV_LIST 0x02
260#define CACHE_INFO 0x04
261#define CACHE_CONFIG 0x05
262#define CACHE_DRV_INFO 0x07
263#define BOARD_FEATURES 0x15
264#define BOARD_INFO 0x28
265#define SET_PERF_MODES 0x82
266#define GET_PERF_MODES 0x83
267#define CACHE_READ_OEM_STRING_RECORD 0x84
268#define HOST_GET 0x10001L
269#define IO_CHANNEL 0x00020000L
270#define INVALID_CHANNEL 0x0000ffffL
271
272
273#define S_OK 1
274#define S_GENERR 6
275#define S_BSY 7
276#define S_CACHE_UNKNOWN 12
277#define S_RAW_SCSI 12
278#define S_RAW_ILL 0xff
279#define S_NOFUNC -2
280#define S_CACHE_RESERV -24
281
282
283#define INIT_RETRIES 100000
284#define INIT_TIMEOUT 100000
285#define POLL_TIMEOUT 10000
286
287
288#define DEFAULT_PRI 0x20
289#define IOCTL_PRI 0x10
290#define HIGH_PRI 0x08
291
292
293#define GDTH_DATA_IN 0x01000000L
294#define GDTH_DATA_OUT 0x00000000L
295
296
297#define ID0REG 0x0c80
298#define EINTENABREG 0x0c89
299#define SEMA0REG 0x0c8a
300#define SEMA1REG 0x0c8b
301#define LDOORREG 0x0c8d
302#define EDENABREG 0x0c8e
303#define EDOORREG 0x0c8f
304#define MAILBOXREG 0x0c90
305#define EISAREG 0x0cc0
306
307
308#define GDTH_MAP_NONE 0
309#define GDTH_MAP_SINGLE 1
310#define GDTH_MAP_SG 2
311#define GDTH_MAP_IOCTL 3
312
313
314#define LINUX_OS 8
315#define SCATTER_GATHER 1
316#define SECS32 0x1f
317#define BIOS_ID_OFFS 0x10
318#define LOCALBOARD 0
319#define ASYNCINDEX 0
320#define SPEZINDEX 1
321#define COALINDEX (GDTH_MAXCMDS + 2)
322
323
324#define SCATTER_GATHER 1
325#define GDT_WR_THROUGH 0x100
326#define GDT_64BIT 0x200
327
328#include "gdth_ioctl.h"
329
330
331typedef struct {
332 ulong32 msg_handle;
333 ulong32 msg_len;
334 ulong32 msg_alen;
335 unchar msg_answer;
336 unchar msg_ext;
337 unchar msg_reserved[2];
338 char msg_text[MSGLEN+2];
339} PACKED gdth_msg_str;
340
341
342
343
344
345typedef struct {
346 ulong32 status;
347 ulong32 ext_status;
348 ulong32 info0;
349 ulong32 info1;
350} PACKED gdth_coal_status;
351
352
353typedef struct {
354 ulong32 version;
355 ulong32 st_mode;
356 ulong32 st_buff_addr1;
357 ulong32 st_buff_u_addr1;
358 ulong32 st_buff_indx1;
359 ulong32 st_buff_addr2;
360 ulong32 st_buff_u_addr2;
361 ulong32 st_buff_indx2;
362 ulong32 st_buff_size;
363 ulong32 cmd_mode;
364 ulong32 cmd_buff_addr1;
365 ulong32 cmd_buff_u_addr1;
366 ulong32 cmd_buff_indx1;
367 ulong32 cmd_buff_addr2;
368 ulong32 cmd_buff_u_addr2;
369 ulong32 cmd_buff_indx2;
370 ulong32 cmd_buff_size;
371 ulong32 reserved1;
372 ulong32 reserved2;
373} PACKED gdth_perf_modes;
374
375
376typedef struct {
377 unchar vendor[8];
378 unchar product[16];
379 unchar revision[4];
380 ulong32 sy_rate;
381 ulong32 sy_max_rate;
382 ulong32 no_ldrive;
383 ulong32 blkcnt;
384 ushort blksize;
385 unchar available;
386 unchar init;
387 unchar devtype;
388 unchar rm_medium;
389 unchar wp_medium;
390 unchar ansi;
391 unchar protocol;
392 unchar sync;
393 unchar disc;
394 unchar queueing;
395 unchar cached;
396 unchar target_id;
397 unchar lun;
398 unchar orphan;
399 ulong32 last_error;
400 ulong32 last_result;
401 ulong32 check_errors;
402 unchar percent;
403 unchar last_check;
404 unchar res[2];
405 ulong32 flags;
406 unchar multi_bus;
407 unchar mb_status;
408 unchar res2[2];
409 unchar mb_alt_status;
410 unchar mb_alt_bid;
411 unchar mb_alt_tid;
412 unchar res3;
413 unchar fc_flag;
414 unchar res4;
415 ushort fc_frame_size;
416 char wwn[8];
417} PACKED gdth_diskinfo_str;
418
419
420typedef struct {
421 ulong32 channel_no;
422 ulong32 drive_cnt;
423 unchar siop_id;
424 unchar siop_state;
425} PACKED gdth_getch_str;
426
427
428typedef struct {
429 ulong32 sc_no;
430 ulong32 sc_cnt;
431 ulong32 sc_list[MAXID];
432} PACKED gdth_drlist_str;
433
434
435typedef struct {
436 unchar sddc_type;
437 unchar sddc_format;
438 unchar sddc_len;
439 unchar sddc_res;
440 ulong32 sddc_cnt;
441} PACKED gdth_defcnt_str;
442
443
444typedef struct {
445 ulong32 bid;
446 ulong32 first;
447 ulong32 entries;
448 ulong32 count;
449 ulong32 mon_time;
450 struct {
451 unchar tid;
452 unchar lun;
453 unchar res[2];
454 ulong32 blk_size;
455 ulong32 rd_count;
456 ulong32 wr_count;
457 ulong32 rd_blk_count;
458 ulong32 wr_blk_count;
459 ulong32 retries;
460 ulong32 reassigns;
461 } PACKED list[1];
462} PACKED gdth_dskstat_str;
463
464
465typedef struct {
466 ulong32 version;
467 unchar list_entries;
468 unchar first_chan;
469 unchar last_chan;
470 unchar chan_count;
471 ulong32 list_offset;
472} PACKED gdth_iochan_header;
473
474
475typedef struct {
476 gdth_iochan_header hdr;
477 struct {
478 ulong32 address;
479 unchar type;
480 unchar local_no;
481 ushort features;
482 } PACKED list[MAXBUS];
483} PACKED gdth_iochan_str;
484
485
486typedef struct {
487 gdth_iochan_header hdr;
488 struct {
489 unchar proc_id;
490 unchar proc_defect;
491 unchar reserved[2];
492 } PACKED list[MAXBUS];
493} PACKED gdth_raw_iochan_str;
494
495
496typedef struct {
497 ulong32 al_controller;
498 unchar al_cache_drive;
499 unchar al_status;
500 unchar al_res[2];
501} PACKED gdth_arraycomp_str;
502
503
504typedef struct {
505 unchar ai_type;
506 unchar ai_cache_drive_cnt;
507 unchar ai_state;
508 unchar ai_master_cd;
509 ulong32 ai_master_controller;
510 ulong32 ai_size;
511 ulong32 ai_striping_size;
512 ulong32 ai_secsize;
513 ulong32 ai_err_info;
514 unchar ai_name[8];
515 unchar ai_controller_cnt;
516 unchar ai_removable;
517 unchar ai_write_protected;
518 unchar ai_devtype;
519 gdth_arraycomp_str ai_drives[35];
520 unchar ai_drive_entries;
521 unchar ai_protected;
522 unchar ai_verify_state;
523 unchar ai_ext_state;
524 unchar ai_expand_state;
525 unchar ai_reserved[3];
526} PACKED gdth_arrayinf_str;
527
528
529typedef struct {
530 ulong32 controller_no;
531 unchar cd_handle;
532 unchar is_arrayd;
533 unchar is_master;
534 unchar is_parity;
535 unchar is_hotfix;
536 unchar res[3];
537} PACKED gdth_alist_str;
538
539typedef struct {
540 ulong32 entries_avail;
541 ulong32 entries_init;
542 ulong32 first_entry;
543 ulong32 list_offset;
544 gdth_alist_str list[1];
545} PACKED gdth_arcdl_str;
546
547
548typedef struct {
549 ulong32 version;
550 ushort state;
551 ushort strategy;
552 ushort write_back;
553 ushort block_size;
554} PACKED gdth_cpar_str;
555
556typedef struct {
557 ulong32 csize;
558 ulong32 read_cnt;
559 ulong32 write_cnt;
560 ulong32 tr_hits;
561 ulong32 sec_hits;
562 ulong32 sec_miss;
563} PACKED gdth_cstat_str;
564
565typedef struct {
566 gdth_cpar_str cpar;
567 gdth_cstat_str cstat;
568} PACKED gdth_cinfo_str;
569
570
571typedef struct {
572 unchar cd_name[8];
573 ulong32 cd_devtype;
574 ulong32 cd_ldcnt;
575 ulong32 cd_last_error;
576 unchar cd_initialized;
577 unchar cd_removable;
578 unchar cd_write_protected;
579 unchar cd_flags;
580 ulong32 ld_blkcnt;
581 ulong32 ld_blksize;
582 ulong32 ld_dcnt;
583 ulong32 ld_slave;
584 ulong32 ld_dtype;
585 ulong32 ld_last_error;
586 unchar ld_name[8];
587 unchar ld_error;
588} PACKED gdth_cdrinfo_str;
589
590
591typedef struct {
592 ulong32 ctl_version;
593 ulong32 file_major_version;
594 ulong32 file_minor_version;
595 ulong32 buffer_size;
596 ulong32 cpy_count;
597 ulong32 ext_error;
598 ulong32 oem_id;
599 ulong32 board_id;
600} PACKED gdth_oem_str_params;
601
602typedef struct {
603 unchar product_0_1_name[16];
604 unchar product_4_5_name[16];
605 unchar product_cluster_name[16];
606 unchar product_reserved[16];
607 unchar scsi_cluster_target_vendor_id[16];
608 unchar cluster_raid_fw_name[16];
609 unchar oem_brand_name[16];
610 unchar oem_raid_type[16];
611 unchar bios_type[13];
612 unchar bios_title[50];
613 unchar oem_company_name[37];
614 ulong32 pci_id_1;
615 ulong32 pci_id_2;
616 unchar validation_status[80];
617 unchar reserved_1[4];
618 unchar scsi_host_drive_inquiry_vendor_id[16];
619 unchar library_file_template[16];
620 unchar reserved_2[16];
621 unchar tool_name_1[32];
622 unchar tool_name_2[32];
623 unchar tool_name_3[32];
624 unchar oem_contact_1[84];
625 unchar oem_contact_2[84];
626 unchar oem_contact_3[84];
627} PACKED gdth_oem_str;
628
629typedef struct {
630 gdth_oem_str_params params;
631 gdth_oem_str text;
632} PACKED gdth_oem_str_ioctl;
633
634
635typedef struct {
636 unchar chaining;
637 unchar striping;
638 unchar mirroring;
639 unchar raid;
640} PACKED gdth_bfeat_str;
641
642
643typedef struct {
644 ulong32 ser_no;
645 unchar oem_id[2];
646 ushort ep_flags;
647 ulong32 proc_id;
648 ulong32 memsize;
649 unchar mem_banks;
650 unchar chan_type;
651 unchar chan_count;
652 unchar rdongle_pres;
653 ulong32 epr_fw_ver;
654 ulong32 upd_fw_ver;
655 ulong32 upd_revision;
656 char type_string[16];
657 char raid_string[16];
658 unchar update_pres;
659 unchar xor_pres;
660 unchar prom_type;
661 unchar prom_count;
662 ulong32 dup_pres;
663 ulong32 chan_pres;
664 ulong32 mem_pres;
665 unchar ft_bus_system;
666 unchar subtype_valid;
667 unchar board_subtype;
668 unchar ramparity_pres;
669} PACKED gdth_binfo_str;
670
671
672typedef struct {
673 char name[8];
674 ulong32 size;
675 unchar host_drive;
676 unchar log_drive;
677 unchar reserved;
678 unchar rw_attribs;
679 ulong32 start_sec;
680} PACKED gdth_hentry_str;
681
682typedef struct {
683 ulong32 entries;
684 ulong32 offset;
685 unchar secs_p_head;
686 unchar heads_p_cyl;
687 unchar reserved;
688 unchar clust_drvtype;
689 ulong32 location;
690 gdth_hentry_str entry[MAX_HDRIVES];
691} PACKED gdth_hget_str;
692
693
694
695
696
697typedef struct {
698 unchar S_Cmd_Indx;
699 unchar volatile S_Status;
700 ushort reserved1;
701 ulong32 S_Info[4];
702 unchar volatile Sema0;
703 unchar reserved2[3];
704 unchar Cmd_Index;
705 unchar reserved3[3];
706 ushort volatile Status;
707 ushort Service;
708 ulong32 Info[2];
709 struct {
710 ushort offset;
711 ushort serv_id;
712 } PACKED comm_queue[MAXOFFSETS];
713 ulong32 bios_reserved[2];
714 unchar gdt_dpr_cmd[1];
715} PACKED gdt_dpr_if;
716
717
718typedef struct {
719 ulong32 magic;
720 ushort need_deinit;
721 unchar switch_support;
722 unchar padding[9];
723 unchar os_used[16];
724 unchar unused[28];
725 unchar fw_magic;
726} PACKED gdt_pci_sram;
727
728
729typedef struct {
730 unchar os_used[16];
731 ushort need_deinit;
732 unchar switch_support;
733 unchar padding;
734} PACKED gdt_eisa_sram;
735
736
737
738typedef struct {
739 union {
740 struct {
741 unchar bios_used[0x3c00-32];
742 ulong32 magic;
743 ushort need_deinit;
744 unchar switch_support;
745 unchar padding[9];
746 unchar os_used[16];
747 } PACKED dp_sram;
748 unchar bios_area[0x4000];
749 } bu;
750 union {
751 gdt_dpr_if ic;
752 unchar if_area[0x3000];
753 } u;
754 struct {
755 unchar memlock;
756 unchar event;
757 unchar irqen;
758 unchar irqdel;
759 unchar volatile Sema1;
760 unchar rq;
761 } PACKED io;
762} PACKED gdt2_dpram_str;
763
764
765typedef struct {
766 union {
767 gdt_dpr_if ic;
768 unchar if_area[0xff0-sizeof(gdt_pci_sram)];
769 } u;
770 gdt_pci_sram gdt6sr;
771 struct {
772 unchar unused0[1];
773 unchar volatile Sema1;
774 unchar unused1[3];
775 unchar irqen;
776 unchar unused2[2];
777 unchar event;
778 unchar unused3[3];
779 unchar irqdel;
780 unchar unused4[3];
781 } PACKED io;
782} PACKED gdt6_dpram_str;
783
784
785typedef struct {
786 unchar cfg_reg;
787 unchar unused1[0x3f];
788 unchar volatile sema0_reg;
789 unchar volatile sema1_reg;
790 unchar unused2[2];
791 ushort volatile status;
792 ushort service;
793 ulong32 info[2];
794 unchar unused3[0x10];
795 unchar ldoor_reg;
796 unchar unused4[3];
797 unchar volatile edoor_reg;
798 unchar unused5[3];
799 unchar control0;
800 unchar control1;
801 unchar unused6[0x16];
802} PACKED gdt6c_plx_regs;
803
804
805typedef struct {
806 union {
807 gdt_dpr_if ic;
808 unchar if_area[0x4000-sizeof(gdt_pci_sram)];
809 } u;
810 gdt_pci_sram gdt6sr;
811} PACKED gdt6c_dpram_str;
812
813
814typedef struct {
815 unchar unused1[16];
816 unchar volatile sema0_reg;
817 unchar unused2;
818 unchar volatile sema1_reg;
819 unchar unused3;
820 ushort volatile status;
821 ushort service;
822 ulong32 info[2];
823 unchar ldoor_reg;
824 unchar unused4[11];
825 unchar volatile edoor_reg;
826 unchar unused5[7];
827 unchar edoor_en_reg;
828 unchar unused6[27];
829 ulong32 unused7[939];
830 ulong32 severity;
831 char evt_str[256];
832} PACKED gdt6m_i960_regs;
833
834
835typedef struct {
836 gdt6m_i960_regs i960r;
837 union {
838 gdt_dpr_if ic;
839 unchar if_area[0x3000-sizeof(gdt_pci_sram)];
840 } u;
841 gdt_pci_sram gdt6sr;
842} PACKED gdt6m_dpram_str;
843
844
845
846typedef struct {
847 struct pci_dev *pdev;
848 ushort vendor_id;
849 ushort device_id;
850 ushort subdevice_id;
851 unchar bus;
852 unchar device_fn;
853 ulong dpmem;
854 ulong io;
855 ulong io_mm;
856 unchar irq;
857} gdth_pci_str;
858
859
860
861typedef struct {
862 ushort oem_id;
863 ushort type;
864 ulong32 stype;
865 ushort subdevice_id;
866 ushort fw_vers;
867 ushort cache_feat;
868 ushort raw_feat;
869 ushort screen_feat;
870 ushort bmic;
871 void *brd;
872 ulong32 brd_phys;
873 gdt6c_plx_regs *plx;
874 gdth_cmd_str *pccb;
875 ulong32 ccb_phys;
876#ifdef INT_COAL
877 gdth_coal_status *coal_stat;
878 ulong64 coal_stat_phys;
879#endif
880 char *pscratch;
881 ulong64 scratch_phys;
882 unchar scratch_busy;
883 unchar dma64_support;
884 gdth_msg_str *pmsg;
885 ulong64 msg_phys;
886 unchar scan_mode;
887 unchar irq;
888 unchar drq;
889 ushort status;
890 ushort service;
891 ulong32 info;
892 ulong32 info2;
893 Scsi_Cmnd *req_first;
894 struct {
895 unchar present;
896 unchar is_logdrv;
897 unchar is_arraydrv;
898 unchar is_master;
899 unchar is_parity;
900 unchar is_hotfix;
901 unchar master_no;
902 unchar lock;
903 unchar heads;
904 unchar secs;
905 ushort devtype;
906 ulong64 size;
907 unchar ldr_no;
908 unchar rw_attribs;
909 unchar cluster_type;
910 unchar media_changed;
911 ulong32 start_sec;
912 } hdr[MAX_LDRIVES];
913 struct {
914 unchar lock;
915 unchar pdev_cnt;
916 unchar local_no;
917 unchar io_cnt[MAXID];
918 ulong32 address;
919 ulong32 id_list[MAXID];
920 } raw[MAXBUS];
921 struct {
922 Scsi_Cmnd *cmnd;
923 ushort service;
924 } cmd_tab[GDTH_MAXCMDS];
925 unchar bus_cnt;
926 unchar tid_cnt;
927 unchar bus_id[MAXBUS];
928 unchar virt_bus;
929 unchar more_proc;
930 ushort cmd_cnt;
931 ushort cmd_len;
932 ushort cmd_offs_dpmem;
933 ushort ic_all_size;
934 gdth_cpar_str cpar;
935 gdth_bfeat_str bfeat;
936 gdth_binfo_str binfo;
937 gdth_evt_data dvr;
938 spinlock_t smp_lock;
939#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
940 struct pci_dev *pdev;
941#endif
942 char oem_name[8];
943#ifdef GDTH_DMA_STATISTICS
944 ulong dma32_cnt, dma64_cnt;
945#endif
946#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
947 Scsi_Device *sdev;
948#else
949 Scsi_Device sdev;
950#endif
951} gdth_ha_str;
952
953
954typedef struct {
955 ushort hanum;
956 ushort busnum;
957} gdth_num_str;
958
959
960typedef struct {
961 gdth_num_str numext;
962 gdth_ha_str haext;
963 gdth_cmd_str cmdext;
964} gdth_ext_str;
965
966
967
968typedef struct {
969 unchar type_qual;
970 unchar modif_rmb;
971 unchar version;
972 unchar resp_aenc;
973 unchar add_length;
974 unchar reserved1;
975 unchar reserved2;
976 unchar misc;
977 unchar vendor[8];
978 unchar product[16];
979 unchar revision[4];
980} PACKED gdth_inq_data;
981
982
983typedef struct {
984 ulong32 last_block_no;
985 ulong32 block_length;
986} PACKED gdth_rdcap_data;
987
988
989typedef struct {
990 ulong64 last_block_no;
991 ulong32 block_length;
992} PACKED gdth_rdcap16_data;
993
994
995typedef struct {
996 unchar errorcode;
997 unchar segno;
998 unchar key;
999 ulong32 info;
1000 unchar add_length;
1001 ulong32 cmd_info;
1002 unchar adsc;
1003 unchar adsq;
1004 unchar fruc;
1005 unchar key_spec[3];
1006} PACKED gdth_sense_data;
1007
1008
1009typedef struct {
1010 struct {
1011 unchar data_length;
1012 unchar med_type;
1013 unchar dev_par;
1014 unchar bd_length;
1015 } PACKED hd;
1016 struct {
1017 unchar dens_code;
1018 unchar block_count[3];
1019 unchar reserved;
1020 unchar block_length[3];
1021 } PACKED bd;
1022} PACKED gdth_modep_data;
1023
1024
1025typedef struct {
1026 ulong b[10];
1027} PACKED gdth_stackframe;
1028
1029
1030
1031
1032int gdth_detect(Scsi_Host_Template *);
1033int gdth_release(struct Scsi_Host *);
1034int gdth_queuecommand(Scsi_Cmnd *,void (*done)(Scsi_Cmnd *));
1035const char *gdth_info(struct Scsi_Host *);
1036
1037#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
1038int gdth_bios_param(struct scsi_device *,struct block_device *,sector_t,int *);
1039int gdth_proc_info(struct Scsi_Host *, char *,char **,off_t,int,int);
1040#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
1041int gdth_bios_param(Disk *,kdev_t,int *);
1042int gdth_proc_info(char *,char **,off_t,int,int,int);
1043#else
1044int gdth_bios_param(Disk *,kdev_t,int *);
1045extern struct proc_dir_entry proc_scsi_gdth;
1046int gdth_proc_info(char *,char **,off_t,int,int,int);
1047int gdth_abort(Scsi_Cmnd *);
1048int gdth_reset(Scsi_Cmnd *,unsigned int);
1049#define GDTH { proc_dir: &proc_scsi_gdth, \
1050 proc_info: gdth_proc_info, \
1051 name: "GDT SCSI Disk Array Controller",\
1052 detect: gdth_detect, \
1053 release: gdth_release, \
1054 info: gdth_info, \
1055 command: NULL, \
1056 queuecommand: gdth_queuecommand, \
1057 eh_abort_handler: gdth_eh_abort, \
1058 eh_device_reset_handler: gdth_eh_device_reset, \
1059 eh_bus_reset_handler: gdth_eh_bus_reset, \
1060 eh_host_reset_handler: gdth_eh_host_reset, \
1061 abort: gdth_abort, \
1062 reset: gdth_reset, \
1063 bios_param: gdth_bios_param, \
1064 can_queue: GDTH_MAXCMDS, \
1065 this_id: -1, \
1066 sg_tablesize: GDTH_MAXSG, \
1067 cmd_per_lun: GDTH_MAXC_P_L, \
1068 present: 0, \
1069 unchecked_isa_dma: 1, \
1070 use_clustering: ENABLE_CLUSTERING, \
1071 use_new_eh_code: 1 }
1072#endif
1073
1074int gdth_eh_abort(Scsi_Cmnd *scp);
1075int gdth_eh_device_reset(Scsi_Cmnd *scp);
1076int gdth_eh_bus_reset(Scsi_Cmnd *scp);
1077int gdth_eh_host_reset(Scsi_Cmnd *scp);
1078
1079#endif
1080