189580Smsmith/* $FreeBSD: releng/11.0/sys/dev/iir/iir.h 274487 2014-11-13 22:00:18Z jhb $ */ 2139749Simp/*- 3129449Sscottl * Copyright (c) 2000-04 ICP vortex GmbH 4129449Sscottl * Copyright (c) 2002-04 Intel Corporation 5129449Sscottl * Copyright (c) 2003-04 Adaptec Inc. 689580Smsmith * All Rights Reserved 789580Smsmith * 889580Smsmith * Redistribution and use in source and binary forms, with or without 989580Smsmith * modification, are permitted provided that the following conditions 1089580Smsmith * are met: 1189580Smsmith * 1. Redistributions of source code must retain the above copyright 1289580Smsmith * notice, this list of conditions, and the following disclaimer, 1389580Smsmith * without modification, immediately at the beginning of the file. 1489580Smsmith * 2. Redistributions in binary form must reproduce the above copyright 1589580Smsmith * notice, this list of conditions and the following disclaimer in the 1689580Smsmith * documentation and/or other materials provided with the distribution. 1789580Smsmith * 3. The name of the author may not be used to endorse or promote products 1889580Smsmith * derived from this software without specific prior written permission. 1989580Smsmith * 2089580Smsmith * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 2189580Smsmith * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2289580Smsmith * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2389580Smsmith * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 2489580Smsmith * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2589580Smsmith * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2689580Smsmith * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2789580Smsmith * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2889580Smsmith * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2989580Smsmith * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3089580Smsmith * SUCH DAMAGE. 3189580Smsmith * 3289580Smsmith */ 3389580Smsmith 3489580Smsmith/* 3589580Smsmith * 3689580Smsmith * iir.h: Definitions/Constants used by the Intel Integrated RAID driver 3789580Smsmith * 38120477Sscottl * Written by: Achim Leubner <achim_leubner@adaptec.com> 3989580Smsmith * Fixes/Additions: Boji Tony Kannanthanam <boji.t.kannanthanam@intel.com> 4089580Smsmith * 4189580Smsmith * credits: Niklas Hallqvist; OpenBSD driver for the ICP Controllers. 4289580Smsmith * FreeBSD.ORG; Great O/S to work on and for. 43120477Sscottl * 44129449Sscottl * $Id: iir.h 1.6 2004/03/30 10:19:44 achim Exp $" 4589580Smsmith */ 4689580Smsmith 4789580Smsmith#ifndef _IIR_H 4889580Smsmith#define _IIR_H 4989580Smsmith 50143063Sjoerg#ifndef _SYS_CDEFS_H_ 51143063Sjoerg#error this file needs sys/cdefs.h as a prerequisite 52143063Sjoerg#endif 53143063Sjoerg 5489580Smsmith#define IIR_DRIVER_VERSION 1 55129449Sscottl#define IIR_DRIVER_SUBVERSION 5 5689580Smsmith 57120477Sscottl/* OEM IDs */ 58120477Sscottl#define OEM_ID_ICP 0x941c 59120477Sscottl#define OEM_ID_INTEL 0x8000 60120477Sscottl 6189580Smsmith#define GDT_VENDOR_ID 0x1119 6289580Smsmith#define GDT_DEVICE_ID_MIN 0x100 6389580Smsmith#define GDT_DEVICE_ID_MAX 0x2ff 6489580Smsmith#define GDT_DEVICE_ID_NEWRX 0x300 6589580Smsmith 66254379Sjkim#define INTEL_VENDOR_ID_IIR 0x8086 6789580Smsmith#define INTEL_DEVICE_ID_IIR 0x600 6889580Smsmith 6989580Smsmith#define GDT_MAXBUS 6 /* XXX Why not 5? */ 7089580Smsmith#define GDT_MAX_HDRIVES 100 /* max 100 host drives */ 7189580Smsmith#define GDT_MAXID_FC 127 /* Fibre-channel IDs */ 7289580Smsmith#define GDT_MAXID 16 /* SCSI IDs */ 7389580Smsmith#define GDT_MAXOFFSETS 128 7489580Smsmith#define GDT_MAXSG 32 /* Max. s/g elements */ 7589580Smsmith#define GDT_PROTOCOL_VERSION 1 7689580Smsmith#define GDT_LINUX_OS 8 /* Used for cache optimization */ 7789580Smsmith#define GDT_SCATTER_GATHER 1 /* s/g feature */ 7889580Smsmith#define GDT_SECS32 0x1f /* round capacity */ 7989580Smsmith#define GDT_LOCALBOARD 0 /* Board node always 0 */ 8089580Smsmith#define GDT_MAXCMDS 124 8189580Smsmith#define GDT_SECTOR_SIZE 0x200 /* Always 512 bytes for cache devs */ 8289580Smsmith#define GDT_MAX_EVENTS 0x100 /* event buffer */ 8389580Smsmith 8489580Smsmith/* DPMEM constants */ 8589580Smsmith#define GDT_MPR_MAGIC 0xc0ffee11 8689580Smsmith#define GDT_IC_HEADER_BYTES 48 8789580Smsmith#define GDT_IC_QUEUE_BYTES 4 8889580Smsmith#define GDT_DPMEM_COMMAND_OFFSET \ 8989580Smsmith (GDT_IC_HEADER_BYTES + GDT_IC_QUEUE_BYTES * GDT_MAXOFFSETS) 9089580Smsmith 9189580Smsmith/* geometry constants */ 9289580Smsmith#define GDT_MAXCYLS 1024 9389580Smsmith#define GDT_HEADS 64 9489580Smsmith#define GDT_SECS 32 /* mapping 64*32 */ 9589580Smsmith#define GDT_MEDHEADS 127 9689580Smsmith#define GDT_MEDSECS 63 /* mapping 127*63 */ 9789580Smsmith#define GDT_BIGHEADS 255 9889580Smsmith#define GDT_BIGSECS 63 /* mapping 255*63 */ 9989580Smsmith 10089580Smsmith/* data direction raw service */ 10189580Smsmith#define GDT_DATA_IN 0x01000000L 10289580Smsmith#define GDT_DATA_OUT 0x00000000L 10389580Smsmith 10489580Smsmith/* Cache/raw service commands */ 10589580Smsmith#define GDT_INIT 0 /* service initialization */ 10689580Smsmith#define GDT_READ 1 /* read command */ 10789580Smsmith#define GDT_WRITE 2 /* write command */ 10889580Smsmith#define GDT_INFO 3 /* information about devices */ 10989580Smsmith#define GDT_FLUSH 4 /* flush dirty cache buffers */ 11089580Smsmith#define GDT_IOCTL 5 /* ioctl command */ 11189580Smsmith#define GDT_DEVTYPE 9 /* additional information */ 11289580Smsmith#define GDT_MOUNT 10 /* mount cache device */ 11389580Smsmith#define GDT_UNMOUNT 11 /* unmount cache device */ 11489580Smsmith#define GDT_SET_FEAT 12 /* set features (scatter/gather) */ 11589580Smsmith#define GDT_GET_FEAT 13 /* get features */ 11689580Smsmith#define GDT_WRITE_THR 16 /* write through */ 11789580Smsmith#define GDT_READ_THR 17 /* read through */ 11889580Smsmith#define GDT_EXT_INFO 18 /* extended info */ 11989580Smsmith#define GDT_RESET 19 /* controller reset */ 12089580Smsmith#define GDT_FREEZE_IO 25 /* freeze all IOs */ 12189580Smsmith#define GDT_UNFREEZE_IO 26 /* unfreeze all IOs */ 12289580Smsmith 12389580Smsmith/* Additional raw service commands */ 12489580Smsmith#define GDT_RESERVE 14 /* reserve device to raw service */ 12589580Smsmith#define GDT_RELEASE 15 /* release device */ 12689580Smsmith#define GDT_RESERVE_ALL 16 /* reserve all devices */ 12789580Smsmith#define GDT_RELEASE_ALL 17 /* release all devices */ 12889580Smsmith#define GDT_RESET_BUS 18 /* reset bus */ 12989580Smsmith#define GDT_SCAN_START 19 /* start device scan */ 13089580Smsmith#define GDT_SCAN_END 20 /* stop device scan */ 13189580Smsmith 13289580Smsmith/* IOCTL command defines */ 13389580Smsmith#define GDT_SCSI_DR_INFO 0x00 /* SCSI drive info */ 13489580Smsmith#define GDT_SCSI_CHAN_CNT 0x05 /* SCSI channel count */ 13589580Smsmith#define GDT_SCSI_DR_LIST 0x06 /* SCSI drive list */ 13689580Smsmith#define GDT_SCSI_DEF_CNT 0x15 /* grown/primary defects */ 13789580Smsmith#define GDT_DSK_STATISTICS 0x4b /* SCSI disk statistics */ 13889580Smsmith#define GDT_IOCHAN_DESC 0x5d /* description of IO channel */ 13989580Smsmith#define GDT_IOCHAN_RAW_DESC 0x5e /* description of raw IO channel */ 14089580Smsmith 14189580Smsmith#define GDT_L_CTRL_PATTERN 0x20000000 /* SCSI IOCTL mask */ 14289580Smsmith#define GDT_ARRAY_INFO 0x12 /* array drive info */ 14389580Smsmith#define GDT_ARRAY_DRV_LIST 0x0f /* array drive list */ 14489580Smsmith#define GDT_LA_CTRL_PATTERN 0x10000000 /* array IOCTL mask */ 14589580Smsmith#define GDT_CACHE_DRV_CNT 0x01 /* cache drive count */ 14689580Smsmith#define GDT_CACHE_DRV_LIST 0x02 /* cache drive list */ 14789580Smsmith#define GDT_CACHE_INFO 0x04 /* cache info */ 14889580Smsmith#define GDT_CACHE_CONFIG 0x05 /* cache configuration */ 14989580Smsmith#define GDT_CACHE_DRV_INFO 0x07 /* cache drive info */ 15089580Smsmith#define GDT_BOARD_FEATURES 0x15 /* controller features */ 15189580Smsmith#define GDT_BOARD_INFO 0x28 /* controller info */ 152114001Sscottl#define GDT_OEM_STR_RECORD 0x84 /* OEM info */ 15389580Smsmith#define GDT_HOST_GET 0x10001 /* get host drive list */ 15489580Smsmith#define GDT_IO_CHANNEL 0x20000 /* default IO channel */ 15589580Smsmith#define GDT_INVALID_CHANNEL 0xffff /* invalid channel */ 15689580Smsmith 15789580Smsmith/* IOCTLs */ 15889580Smsmith#define GDT_IOCTL_GENERAL _IOWR('J', 0, gdt_ucmd_t) /* general IOCTL */ 159129449Sscottl#define GDT_IOCTL_DRVERS _IOR('J', 1, int) /* get driver version */ 160129449Sscottl#define GDT_IOCTL_CTRTYPE _IOWR('J', 2, gdt_ctrt_t) /* get ctr. type */ 161129449Sscottl#define GDT_IOCTL_DRVERS_OLD _IOWR('J', 1, int) /* get driver version */ 162129449Sscottl#define GDT_IOCTL_CTRTYPE_OLD _IOR('J', 2, gdt_ctrt_t) /* get ctr. type */ 16389580Smsmith#define GDT_IOCTL_OSVERS _IOR('J', 3, gdt_osv_t) /* get OS version */ 16489580Smsmith#define GDT_IOCTL_CTRCNT _IOR('J', 5, int) /* get ctr. count */ 16589580Smsmith#define GDT_IOCTL_EVENT _IOWR('J', 8, gdt_event_t) /* get event */ 16689580Smsmith#define GDT_IOCTL_STATIST _IOR('J', 9, gdt_statist_t) /* get statistics */ 16789580Smsmith 16889580Smsmith/* Service errors */ 16989580Smsmith#define GDT_S_OK 1 /* no error */ 17089580Smsmith#define GDT_S_BSY 7 /* controller busy */ 17189580Smsmith#define GDT_S_RAW_SCSI 12 /* raw service: target error */ 17289580Smsmith#define GDT_S_RAW_ILL 0xff /* raw service: illegal */ 17389580Smsmith#define GDT_S_NO_STATUS 0x1000 /* got no status (driver-generated) */ 17489580Smsmith 17589580Smsmith/* Controller services */ 17689580Smsmith#define GDT_SCSIRAWSERVICE 3 17789580Smsmith#define GDT_CACHESERVICE 9 17889580Smsmith#define GDT_SCREENSERVICE 11 17989580Smsmith 18089580Smsmith/* Scatter/gather element */ 18189580Smsmith#define GDT_SG_PTR 0x00 /* u_int32_t, address */ 18289580Smsmith#define GDT_SG_LEN 0x04 /* u_int32_t, length */ 18389580Smsmith#define GDT_SG_SZ 0x08 18489580Smsmith 18589580Smsmith/* Cache service command */ 18689580Smsmith#define GDT_CACHE_DEVICENO 0x00 /* u_int16_t, number of cache drive */ 18789580Smsmith#define GDT_CACHE_BLOCKNO 0x02 /* u_int32_t, block number */ 18889580Smsmith#define GDT_CACHE_BLOCKCNT 0x06 /* u_int32_t, block count */ 18989580Smsmith#define GDT_CACHE_DESTADDR 0x0a /* u_int32_t, dest. addr. (-1: s/g) */ 19089580Smsmith#define GDT_CACHE_SG_CANZ 0x0e /* u_int32_t, s/g element count */ 19189580Smsmith#define GDT_CACHE_SG_LST 0x12 /* [GDT_MAXSG], s/g list */ 19289580Smsmith#define GDT_CACHE_SZ (0x12 + GDT_MAXSG * GDT_SG_SZ) 19389580Smsmith 19489580Smsmith/* Ioctl command */ 19589580Smsmith#define GDT_IOCTL_PARAM_SIZE 0x00 /* u_int16_t, size of buffer */ 19689580Smsmith#define GDT_IOCTL_SUBFUNC 0x02 /* u_int32_t, ioctl function */ 19789580Smsmith#define GDT_IOCTL_CHANNEL 0x06 /* u_int32_t, device */ 19889580Smsmith#define GDT_IOCTL_P_PARAM 0x0a /* u_int32_t, buffer */ 19989580Smsmith#define GDT_IOCTL_SZ 0x0e 20089580Smsmith 20189580Smsmith/* Screen service defines */ 20289580Smsmith#define GDT_MSG_INV_HANDLE -1 /* special message handle */ 20389580Smsmith#define GDT_MSGLEN 16 /* size of message text */ 20489580Smsmith#define GDT_MSG_SIZE 34 /* size of message structure */ 20589580Smsmith#define GDT_MSG_REQUEST 0 /* async. event. message */ 20689580Smsmith 20789580Smsmith/* Screen service command */ 20889580Smsmith#define GDT_SCREEN_MSG_HANDLE 0x02 /* u_int32_t, message handle */ 20989580Smsmith#define GDT_SCREEN_MSG_ADDR 0x06 /* u_int32_t, message buffer address */ 21089580Smsmith#define GDT_SCREEN_SZ 0x0a 21189580Smsmith 21289580Smsmith/* Screen service message */ 21389580Smsmith#define GDT_SCR_MSG_HANDLE 0x00 /* u_int32_t, message handle */ 21489580Smsmith#define GDT_SCR_MSG_LEN 0x04 /* u_int32_t, size of message */ 21589580Smsmith#define GDT_SCR_MSG_ALEN 0x08 /* u_int32_t, answer length */ 21689580Smsmith#define GDT_SCR_MSG_ANSWER 0x0c /* u_int8_t, answer flag */ 21789580Smsmith#define GDT_SCR_MSG_EXT 0x0d /* u_int8_t, more messages? */ 21889580Smsmith#define GDT_SCR_MSG_RES 0x0e /* u_int16_t, reserved */ 21989580Smsmith#define GDT_SCR_MSG_TEXT 0x10 /* GDT_MSGLEN+2, message text */ 22089580Smsmith#define GDT_SCR_MSG_SZ (0x12 + GDT_MSGLEN) 22189580Smsmith 22289580Smsmith/* Raw service command */ 22389580Smsmith#define GDT_RAW_DIRECTION 0x02 /* u_int32_t, data direction */ 22489580Smsmith#define GDT_RAW_MDISC_TIME 0x06 /* u_int32_t, disc. time (0: none) */ 22589580Smsmith#define GDT_RAW_MCON_TIME 0x0a /* u_int32_t, conn. time (0: none) */ 22689580Smsmith#define GDT_RAW_SDATA 0x0e /* u_int32_t, dest. addr. (-1: s/g) */ 22789580Smsmith#define GDT_RAW_SDLEN 0x12 /* u_int32_t, data length */ 22889580Smsmith#define GDT_RAW_CLEN 0x16 /* u_int32_t, SCSI cmd len (6/10/12) */ 22989580Smsmith#define GDT_RAW_CMD 0x1a /* u_int8_t [12], SCSI command */ 23089580Smsmith#define GDT_RAW_TARGET 0x26 /* u_int8_t, target ID */ 23189580Smsmith#define GDT_RAW_LUN 0x27 /* u_int8_t, LUN */ 23289580Smsmith#define GDT_RAW_BUS 0x28 /* u_int8_t, SCSI bus number */ 23389580Smsmith#define GDT_RAW_PRIORITY 0x29 /* u_int8_t, only 0 used */ 23489580Smsmith#define GDT_RAW_SENSE_LEN 0x2a /* u_int32_t, sense data length */ 23589580Smsmith#define GDT_RAW_SENSE_DATA 0x2e /* u_int32_t, sense data address */ 23689580Smsmith#define GDT_RAW_SG_RANZ 0x36 /* u_int32_t, s/g element count */ 23789580Smsmith#define GDT_RAW_SG_LST 0x3a /* [GDT_MAXSG], s/g list */ 23889580Smsmith#define GDT_RAW_SZ (0x3a + GDT_MAXSG * GDT_SG_SZ) 23989580Smsmith 24089580Smsmith/* Command structure */ 24189580Smsmith#define GDT_CMD_BOARDNODE 0x00 /* u_int32_t, board node (always 0) */ 24289580Smsmith#define GDT_CMD_COMMANDINDEX 0x04 /* u_int32_t, command number */ 24389580Smsmith#define GDT_CMD_OPCODE 0x08 /* u_int16_t, opcode (READ, ...) */ 24489580Smsmith#define GDT_CMD_UNION 0x0a /* cache/screen/raw service command */ 24589580Smsmith#define GDT_CMD_UNION_SZ GDT_RAW_SZ 24689580Smsmith#define GDT_CMD_SZ (0x0a + GDT_CMD_UNION_SZ) 24789580Smsmith 24889580Smsmith/* Command queue entries */ 24989580Smsmith#define GDT_OFFSET 0x00 /* u_int16_t, command offset in the DP RAM */ 25089580Smsmith#define GDT_SERV_ID 0x02 /* u_int16_t, service */ 25189580Smsmith#define GDT_COMM_Q_SZ 0x04 25289580Smsmith 25389580Smsmith/* Interface area */ 25489580Smsmith#define GDT_S_CMD_INDX 0x00 /* u_int8_t, special command */ 25589580Smsmith#define GDT_S_STATUS 0x01 /* volatile u_int8_t, status special command */ 25689580Smsmith#define GDT_S_INFO 0x04 /* u_int32_t [4], add. info special command */ 25789580Smsmith#define GDT_SEMA0 0x14 /* volatile u_int8_t, command semaphore */ 25889580Smsmith#define GDT_CMD_INDEX 0x18 /* u_int8_t, command number */ 25989580Smsmith#define GDT_STATUS 0x1c /* volatile u_int16_t, command status */ 26089580Smsmith#define GDT_SERVICE 0x1e /* u_int16_t, service (for asynch. events) */ 26189580Smsmith#define GDT_DPR_INFO 0x20 /* u_int32_t [2], additional info */ 26289580Smsmith#define GDT_COMM_QUEUE 0x28 /* command queue */ 26389580Smsmith#define GDT_DPR_CMD (0x30 + GDT_MAXOFFSETS * GDT_COMM_Q_SZ) 26489580Smsmith /* u_int8_t [], commands */ 26589580Smsmith 26689580Smsmith/* I/O channel header */ 26789580Smsmith#define GDT_IOC_VERSION 0x00 /* u_int32_t, version (~0: newest) */ 26889580Smsmith#define GDT_IOC_LIST_ENTRIES 0x04 /* u_int8_t, list entry count */ 26989580Smsmith#define GDT_IOC_FIRST_CHAN 0x05 /* u_int8_t, first channel number */ 27089580Smsmith#define GDT_IOC_LAST_CHAN 0x06 /* u_int8_t, last channel number */ 27189580Smsmith#define GDT_IOC_CHAN_COUNT 0x07 /* u_int8_t, (R) channel count */ 27289580Smsmith#define GDT_IOC_LIST_OFFSET 0x08 /* u_int32_t, offset of list[0] */ 27389580Smsmith#define GDT_IOC_HDR_SZ 0x0c 27489580Smsmith 27589580Smsmith#define GDT_IOC_NEWEST 0xffffffff /* goes into GDT_IOC_VERSION */ 27689580Smsmith 27789580Smsmith/* Get I/O channel description */ 27889580Smsmith#define GDT_IOC_ADDRESS 0x00 /* u_int32_t, channel address */ 27989580Smsmith#define GDT_IOC_TYPE 0x04 /* u_int8_t, type (SCSI/FCSL) */ 28089580Smsmith#define GDT_IOC_LOCAL_NO 0x05 /* u_int8_t, local number */ 28189580Smsmith#define GDT_IOC_FEATURES 0x06 /* u_int16_t, channel features */ 28289580Smsmith#define GDT_IOC_SZ 0x08 28389580Smsmith 28489580Smsmith/* Get raw I/O channel description */ 28589580Smsmith#define GDT_RAWIOC_PROC_ID 0x00 /* u_int8_t, processor id */ 28689580Smsmith#define GDT_RAWIOC_PROC_DEFECT 0x01 /* u_int8_t, defect? */ 28789580Smsmith#define GDT_RAWIOC_SZ 0x04 28889580Smsmith 28989580Smsmith/* Get SCSI channel count */ 29089580Smsmith#define GDT_GETCH_CHANNEL_NO 0x00 /* u_int32_t, channel number */ 29189580Smsmith#define GDT_GETCH_DRIVE_CNT 0x04 /* u_int32_t, drive count */ 29289580Smsmith#define GDT_GETCH_SIOP_ID 0x08 /* u_int8_t, SCSI processor ID */ 29389580Smsmith#define GDT_GETCH_SIOP_STATE 0x09 /* u_int8_t, SCSI processor state */ 29489580Smsmith#define GDT_GETCH_SZ 0x0a 29589580Smsmith 29689580Smsmith/* Cache info/config IOCTL structures */ 29789580Smsmith#define GDT_CPAR_VERSION 0x00 /* u_int32_t, firmware version */ 29889580Smsmith#define GDT_CPAR_STATE 0x04 /* u_int16_t, cache state (on/off) */ 29989580Smsmith#define GDT_CPAR_STRATEGY 0x06 /* u_int16_t, cache strategy */ 30089580Smsmith#define GDT_CPAR_WRITE_BACK 0x08 /* u_int16_t, write back (on/off) */ 30189580Smsmith#define GDT_CPAR_BLOCK_SIZE 0x0a /* u_int16_t, cache block size */ 30289580Smsmith#define GDT_CPAR_SZ 0x0c 30389580Smsmith 30489580Smsmith#define GDT_CSTAT_CSIZE 0x00 /* u_int32_t, cache size */ 30589580Smsmith#define GDT_CSTAT_READ_CNT 0x04 /* u_int32_t, read counter */ 30689580Smsmith#define GDT_CSTAT_WRITE_CNT 0x08 /* u_int32_t, write counter */ 30789580Smsmith#define GDT_CSTAT_TR_HITS 0x0c /* u_int32_t, track hits */ 30889580Smsmith#define GDT_CSTAT_SEC_HITS 0x10 /* u_int32_t, sector hits */ 30989580Smsmith#define GDT_CSTAT_SEC_MISS 0x14 /* u_int32_t, sector misses */ 31089580Smsmith#define GDT_CSTAT_SZ 0x18 31189580Smsmith 31289580Smsmith/* Get cache info */ 31389580Smsmith#define GDT_CINFO_CPAR 0x00 31489580Smsmith#define GDT_CINFO_CSTAT GDT_CPAR_SZ 31589580Smsmith#define GDT_CINFO_SZ (GDT_CPAR_SZ + GDT_CSTAT_SZ) 31689580Smsmith 31789580Smsmith/* Get board info */ 31889580Smsmith#define GDT_BINFO_SER_NO 0x00 /* u_int32_t, serial number */ 31989580Smsmith#define GDT_BINFO_OEM_ID 0x04 /* u_int8_t [2], OEM ID */ 32089580Smsmith#define GDT_BINFO_EP_FLAGS 0x06 /* u_int16_t, eprom flags */ 32189580Smsmith#define GDT_BINFO_PROC_ID 0x08 /* u_int32_t, processor ID */ 32289580Smsmith#define GDT_BINFO_MEMSIZE 0x0c /* u_int32_t, memory size (bytes) */ 32389580Smsmith#define GDT_BINFO_MEM_BANKS 0x10 /* u_int8_t, memory banks */ 32489580Smsmith#define GDT_BINFO_CHAN_TYPE 0x11 /* u_int8_t, channel type */ 32589580Smsmith#define GDT_BINFO_CHAN_COUNT 0x12 /* u_int8_t, channel count */ 32689580Smsmith#define GDT_BINFO_RDONGLE_PRES 0x13 /* u_int8_t, dongle present */ 32789580Smsmith#define GDT_BINFO_EPR_FW_VER 0x14 /* u_int32_t, (eprom) firmware ver */ 32889580Smsmith#define GDT_BINFO_UPD_FW_VER 0x18 /* u_int32_t, (update) firmware ver */ 32989580Smsmith#define GDT_BINFO_UPD_REVISION 0x1c /* u_int32_t, update revision */ 33089580Smsmith#define GDT_BINFO_TYPE_STRING 0x20 /* char [16], controller name */ 33189580Smsmith#define GDT_BINFO_RAID_STRING 0x30 /* char [16], RAID firmware name */ 33289580Smsmith#define GDT_BINFO_UPDATE_PRES 0x40 /* u_int8_t, update present? */ 33389580Smsmith#define GDT_BINFO_XOR_PRES 0x41 /* u_int8_t, XOR engine present */ 33489580Smsmith#define GDT_BINFO_PROM_TYPE 0x42 /* u_int8_t, ROM type (eprom/flash) */ 33589580Smsmith#define GDT_BINFO_PROM_COUNT 0x43 /* u_int8_t, number of ROM devices */ 33689580Smsmith#define GDT_BINFO_DUP_PRES 0x44 /* u_int32_t, duplexing module pres? */ 33789580Smsmith#define GDT_BINFO_CHAN_PRES 0x48 /* u_int32_t, # of exp. channels */ 33889580Smsmith#define GDT_BINFO_MEM_PRES 0x4c /* u_int32_t, memory expansion inst? */ 33989580Smsmith#define GDT_BINFO_FT_BUS_SYSTEM 0x50 /* u_int8_t, fault bus supported? */ 34089580Smsmith#define GDT_BINFO_SUBTYPE_VALID 0x51 /* u_int8_t, board_subtype valid */ 34189580Smsmith#define GDT_BINFO_BOARD_SUBTYPE 0x52 /* u_int8_t, subtype/hardware level */ 34289580Smsmith#define GDT_BINFO_RAMPAR_PRES 0x53 /* u_int8_t, RAM parity check hw? */ 34389580Smsmith#define GDT_BINFO_SZ 0x54 34489580Smsmith 34589580Smsmith/* Get board features */ 34689580Smsmith#define GDT_BFEAT_CHAINING 0x00 /* u_int8_t, chaining supported */ 34789580Smsmith#define GDT_BFEAT_STRIPING 0x01 /* u_int8_t, striping (RAID-0) supp. */ 34889580Smsmith#define GDT_BFEAT_MIRRORING 0x02 /* u_int8_t, mirroring (RAID-1) supp */ 34989580Smsmith#define GDT_BFEAT_RAID 0x03 /* u_int8_t, RAID-4/5/10 supported */ 35089580Smsmith#define GDT_BFEAT_SZ 0x04 35189580Smsmith 35289580Smsmith/* Other defines */ 35389580Smsmith#define GDT_ASYNCINDEX 0 /* command index asynchronous event */ 35489580Smsmith#define GDT_SPEZINDEX 1 /* command index unknown service */ 35589580Smsmith 35689580Smsmith/* Debugging */ 35789580Smsmith#ifdef GDT_DEBUG 35889580Smsmith#define GDT_D_INTR 0x01 35989580Smsmith#define GDT_D_MISC 0x02 36089580Smsmith#define GDT_D_CMD 0x04 36189580Smsmith#define GDT_D_QUEUE 0x08 36289580Smsmith#define GDT_D_TIMEOUT 0x10 36389580Smsmith#define GDT_D_INIT 0x20 36489580Smsmith#define GDT_D_INVALID 0x40 36589580Smsmith#define GDT_D_DEBUG 0x80 36689580Smsmithextern int gdt_debug; 36789580Smsmith#ifdef __SERIAL__ 36889580Smsmithextern int ser_printf(const char *fmt, ...); 36989580Smsmith#define GDT_DPRINTF(mask, args) if (gdt_debug & (mask)) ser_printf args 37089580Smsmith#else 37189580Smsmith#define GDT_DPRINTF(mask, args) if (gdt_debug & (mask)) printf args 37289580Smsmith#endif 37389580Smsmith#else 37489580Smsmith#define GDT_DPRINTF(mask, args) 37589580Smsmith#endif 37689580Smsmith 37789580Smsmith/* Miscellaneous constants */ 37889580Smsmith#define GDT_RETRIES 100000000 /* 100000 * 1us = 100s */ 37989580Smsmith#define GDT_TIMEOUT 100000000 /* 100000 * 1us = 100s */ 38089580Smsmith#define GDT_POLL_TIMEOUT 10000000 /* 10000 * 1us = 10s */ 38189580Smsmith#define GDT_WATCH_TIMEOUT 10000000 /* 10000 * 1us = 10s */ 38289580Smsmith#define GDT_SCRATCH_SZ 3072 /* 3KB scratch buffer */ 38389580Smsmith 38489580Smsmith/* Map minor numbers to device identity */ 38589580Smsmith#define LUN_MASK 0x0007 38689580Smsmith#define TARGET_MASK 0x03f8 38789580Smsmith#define BUS_MASK 0x1c00 38889580Smsmith#define HBA_MASK 0xe000 38989580Smsmith 39089580Smsmith#define minor2lun(minor) ( minor & LUN_MASK ) 39189580Smsmith#define minor2target(minor) ( (minor & TARGET_MASK) >> 3 ) 39289580Smsmith#define minor2bus(minor) ( (minor & BUS_MASK) >> 10 ) 39389580Smsmith#define minor2hba(minor) ( (minor & HBA_MASK) >> 13 ) 39489580Smsmith#define hba2minor(hba) ( (hba << 13) & HBA_MASK ) 39589580Smsmith 39689580Smsmith 39789580Smsmith/* struct for GDT_IOCTL_GENERAL */ 39889580Smsmith#pragma pack(1) 39989580Smsmithtypedef struct gdt_ucmd { 40089580Smsmith u_int16_t io_node; 40189580Smsmith u_int16_t service; 40289580Smsmith u_int32_t timeout; 40389580Smsmith u_int16_t status; 40489580Smsmith u_int32_t info; 40589580Smsmith 40689580Smsmith u_int32_t BoardNode; /* board node (always 0) */ 40789580Smsmith u_int32_t CommandIndex; /* command number */ 40889580Smsmith u_int16_t OpCode; /* the command (READ,..) */ 40989580Smsmith union { 41089580Smsmith struct { 41189580Smsmith u_int16_t DeviceNo; /* number of cache drive */ 41289580Smsmith u_int32_t BlockNo; /* block number */ 41389580Smsmith u_int32_t BlockCnt; /* block count */ 41489580Smsmith void *DestAddr; /* data */ 41589580Smsmith } cache; /* cache service cmd. str. */ 41689580Smsmith struct { 41789580Smsmith u_int16_t param_size; /* size of p_param buffer */ 41889580Smsmith u_int32_t subfunc; /* IOCTL function */ 41989580Smsmith u_int32_t channel; /* device */ 42089580Smsmith void *p_param; /* data */ 42189580Smsmith } ioctl; /* IOCTL command structure */ 42289580Smsmith struct { 42389580Smsmith u_int16_t reserved; 42489580Smsmith u_int32_t direction; /* data direction */ 42589580Smsmith u_int32_t mdisc_time; /* disc. time (0: no timeout)*/ 42689580Smsmith u_int32_t mcon_time; /* connect time(0: no to.) */ 42789580Smsmith void *sdata; /* dest. addr. (if s/g: -1) */ 42889580Smsmith u_int32_t sdlen; /* data length (bytes) */ 42989580Smsmith u_int32_t clen; /* SCSI cmd. length(6,10,12) */ 43089580Smsmith u_int8_t cmd[12]; /* SCSI command */ 43189580Smsmith u_int8_t target; /* target ID */ 43289580Smsmith u_int8_t lun; /* LUN */ 43389580Smsmith u_int8_t bus; /* SCSI bus number */ 43489580Smsmith u_int8_t priority; /* only 0 used */ 43589580Smsmith u_int32_t sense_len; /* sense data length */ 43689580Smsmith void *sense_data; /* sense data addr. */ 43789580Smsmith u_int32_t link_p; /* linked cmds (not supp.) */ 43889580Smsmith } raw; /* raw service cmd. struct. */ 43989580Smsmith } u; 44089580Smsmith u_int8_t data[GDT_SCRATCH_SZ]; 44189580Smsmith int complete_flag; 44289580Smsmith TAILQ_ENTRY(gdt_ucmd) links; 44389580Smsmith} gdt_ucmd_t; 44489580Smsmith 44589580Smsmith/* struct for GDT_IOCTL_CTRTYPE */ 44689580Smsmithtypedef struct gdt_ctrt { 44789580Smsmith u_int16_t io_node; 44889580Smsmith u_int16_t oem_id; 44989580Smsmith u_int16_t type; 45089580Smsmith u_int32_t info; 45189580Smsmith u_int8_t access; 45289580Smsmith u_int8_t remote; 45389580Smsmith u_int16_t ext_type; 45489580Smsmith u_int16_t device_id; 45589580Smsmith u_int16_t sub_device_id; 45689580Smsmith} gdt_ctrt_t; 45789580Smsmith 45889580Smsmith/* struct for GDT_IOCTL_OSVERS */ 45989580Smsmithtypedef struct gdt_osv { 46089580Smsmith u_int8_t oscode; 46189580Smsmith u_int8_t version; 46289580Smsmith u_int8_t subversion; 46389580Smsmith u_int16_t revision; 46489580Smsmith char name[64]; 46589580Smsmith} gdt_osv_t; 46689580Smsmith 467114001Sscottl/* OEM */ 468114001Sscottl#define GDT_OEM_VERSION 0x00 469114001Sscottl#define GDT_OEM_BUFSIZE 0x0c 470114001Sscottltypedef struct { 471114001Sscottl u_int32_t ctl_version; 472114001Sscottl u_int32_t file_major_version; 473114001Sscottl u_int32_t file_minor_version; 474114001Sscottl u_int32_t buffer_size; 475114001Sscottl u_int32_t cpy_count; 476114001Sscottl u_int32_t ext_error; 477114001Sscottl u_int32_t oem_id; 478114001Sscottl u_int32_t board_id; 479114001Sscottl} gdt_oem_param_t; 480114001Sscottl 481114001Sscottltypedef struct { 482114001Sscottl char product_0_1_name[16]; 483114001Sscottl char product_4_5_name[16]; 484114001Sscottl char product_cluster_name[16]; 485114001Sscottl char product_reserved[16]; 486114001Sscottl char scsi_cluster_target_vendor_id[16]; 487114001Sscottl char cluster_raid_fw_name[16]; 488114001Sscottl char oem_brand_name[16]; 489114001Sscottl char oem_raid_type[16]; 490114001Sscottl char bios_type[13]; 491114001Sscottl char bios_title[50]; 492114001Sscottl char oem_company_name[37]; 493114001Sscottl u_int32_t pci_id_1; 494114001Sscottl u_int32_t pci_id_2; 495114001Sscottl char validation_status[80]; 496114001Sscottl char reserved_1[4]; 497114001Sscottl char scsi_host_drive_inquiry_vendor_id[16]; 498114001Sscottl char library_file_template[32]; 499114001Sscottl char tool_name_1[32]; 500114001Sscottl char tool_name_2[32]; 501114001Sscottl char tool_name_3[32]; 502114001Sscottl char oem_contact_1[84]; 503114001Sscottl char oem_contact_2[84]; 504114001Sscottl char oem_contact_3[84]; 505114001Sscottl} gdt_oem_record_t; 506114001Sscottl 507114001Sscottltypedef struct { 508114001Sscottl gdt_oem_param_t parameters; 509114001Sscottl gdt_oem_record_t text; 510114001Sscottl} gdt_oem_str_record_t; 511114001Sscottl 512114001Sscottl 51389580Smsmith/* controller event structure */ 51489580Smsmith#define GDT_ES_ASYNC 1 51589580Smsmith#define GDT_ES_DRIVER 2 51689580Smsmith#define GDT_ES_TEST 3 51789580Smsmith#define GDT_ES_SYNC 4 51889580Smsmithtypedef struct { 51989580Smsmith u_int16_t size; /* size of structure */ 52089580Smsmith union { 52189580Smsmith char stream[16]; 52289580Smsmith struct { 52389580Smsmith u_int16_t ionode; 52489580Smsmith u_int16_t service; 52589580Smsmith u_int32_t index; 52689580Smsmith } driver; 52789580Smsmith struct { 52889580Smsmith u_int16_t ionode; 52989580Smsmith u_int16_t service; 53089580Smsmith u_int16_t status; 53189580Smsmith u_int32_t info; 53289580Smsmith u_int8_t scsi_coord[3]; 53389580Smsmith } async; 53489580Smsmith struct { 53589580Smsmith u_int16_t ionode; 53689580Smsmith u_int16_t service; 53789580Smsmith u_int16_t status; 53889580Smsmith u_int32_t info; 53989580Smsmith u_int16_t hostdrive; 54089580Smsmith u_int8_t scsi_coord[3]; 54189580Smsmith u_int8_t sense_key; 54289580Smsmith } sync; 54389580Smsmith struct { 54489580Smsmith u_int32_t l1, l2, l3, l4; 54589580Smsmith } test; 54689580Smsmith } eu; 54789580Smsmith u_int32_t severity; 54889580Smsmith u_int8_t event_string[256]; 54989580Smsmith} gdt_evt_data; 55089580Smsmith 55189580Smsmith/* dvrevt structure */ 55289580Smsmithtypedef struct { 55389580Smsmith u_int32_t first_stamp; 55489580Smsmith u_int32_t last_stamp; 55589580Smsmith u_int16_t same_count; 55689580Smsmith u_int16_t event_source; 55789580Smsmith u_int16_t event_idx; 55889580Smsmith u_int8_t application; 55989580Smsmith u_int8_t reserved; 56089580Smsmith gdt_evt_data event_data; 56189580Smsmith} gdt_evt_str; 56289580Smsmith 56389580Smsmith/* struct for GDT_IOCTL_EVENT */ 56489580Smsmithtypedef struct gdt_event { 56589580Smsmith int erase; 56689580Smsmith int handle; 56789580Smsmith gdt_evt_str dvr; 56889580Smsmith} gdt_event_t; 56989580Smsmith 57089580Smsmith/* struct for GDT_IOCTL_STATIST */ 57189580Smsmithtypedef struct gdt_statist { 57289580Smsmith u_int16_t io_count_act; 57389580Smsmith u_int16_t io_count_max; 57489580Smsmith u_int16_t req_queue_act; 57589580Smsmith u_int16_t req_queue_max; 57689580Smsmith u_int16_t cmd_index_act; 57789580Smsmith u_int16_t cmd_index_max; 57889580Smsmith u_int16_t sg_count_act; 57989580Smsmith u_int16_t sg_count_max; 58089580Smsmith} gdt_statist_t; 58189580Smsmith 58289580Smsmith#pragma pack() 58389580Smsmith 58489580Smsmith/* Context structure for interrupt services */ 58589580Smsmithstruct gdt_intr_ctx { 58689580Smsmith u_int32_t info, info2; 58789580Smsmith u_int16_t cmd_status, service; 58889580Smsmith u_int8_t istatus; 58989580Smsmith}; 59089580Smsmith 59189580Smsmith/* softc structure */ 59289580Smsmithstruct gdt_softc { 593170872Sscottl device_t sc_devnode; 594274487Sjhb struct mtx sc_lock; 59589580Smsmith int sc_hanum; 59689580Smsmith int sc_class; /* Controller class */ 59789580Smsmith#define GDT_MPR 0x05 59889580Smsmith#define GDT_CLASS_MASK 0x07 59989580Smsmith#define GDT_FC 0x10 60089580Smsmith#define GDT_CLASS(gdt) ((gdt)->sc_class & GDT_CLASS_MASK) 60189580Smsmith int sc_bus, sc_slot; 602114001Sscottl u_int16_t sc_vendor; 60389580Smsmith u_int16_t sc_device, sc_subdevice; 60489580Smsmith u_int16_t sc_fw_vers; 60589580Smsmith int sc_init_level; 60689580Smsmith int sc_state; 60789580Smsmith#define GDT_NORMAL 0x00 60889580Smsmith#define GDT_POLLING 0x01 60989580Smsmith#define GDT_SHUTDOWN 0x02 61089580Smsmith#define GDT_POLL_WAIT 0x80 611130585Sphk struct cdev *sc_dev; 612274487Sjhb struct resource *sc_dpmem; 61389580Smsmith bus_dma_tag_t sc_parent_dmat; 61489580Smsmith bus_dma_tag_t sc_buffer_dmat; 615156139Sscottl bus_dma_tag_t sc_gcscratch_dmat; 616156139Sscottl bus_dmamap_t sc_gcscratch_dmamap; 617156139Sscottl bus_addr_t sc_gcscratch_busbase; 61889580Smsmith 61989580Smsmith struct gdt_ccb *sc_gccbs; 620156139Sscottl u_int8_t *sc_gcscratch; 62189580Smsmith SLIST_HEAD(, gdt_ccb) sc_free_gccb, sc_pending_gccb; 62289580Smsmith TAILQ_HEAD(, ccb_hdr) sc_ccb_queue; 62389580Smsmith TAILQ_HEAD(, gdt_ucmd) sc_ucmd_queue; 62489580Smsmith 62589580Smsmith u_int16_t sc_ic_all_size; 62689580Smsmith u_int16_t sc_cmd_off; 62789580Smsmith u_int16_t sc_cmd_cnt; 62889580Smsmith 62989580Smsmith u_int32_t sc_info; 63089580Smsmith u_int32_t sc_info2; 63189580Smsmith u_int16_t sc_status; 63289580Smsmith u_int16_t sc_service; 63389580Smsmith 63489580Smsmith u_int8_t sc_bus_cnt; 63589580Smsmith u_int8_t sc_virt_bus; 63689580Smsmith u_int8_t sc_bus_id[GDT_MAXBUS]; 63789580Smsmith u_int8_t sc_more_proc; 63889580Smsmith 63989580Smsmith struct { 64089580Smsmith u_int8_t hd_present; 64189580Smsmith u_int8_t hd_is_logdrv; 64289580Smsmith u_int8_t hd_is_arraydrv; 64389580Smsmith u_int8_t hd_is_master; 64489580Smsmith u_int8_t hd_is_parity; 64589580Smsmith u_int8_t hd_is_hotfix; 64689580Smsmith u_int8_t hd_master_no; 64789580Smsmith u_int8_t hd_lock; 64889580Smsmith u_int8_t hd_heads; 64989580Smsmith u_int8_t hd_secs; 65089580Smsmith u_int16_t hd_devtype; 65189580Smsmith u_int32_t hd_size; 65289580Smsmith u_int8_t hd_ldr_no; 65389580Smsmith u_int8_t hd_rw_attribs; 65489580Smsmith u_int32_t hd_start_sec; 65589580Smsmith } sc_hdr[GDT_MAX_HDRIVES]; 65689580Smsmith 65789580Smsmith u_int16_t sc_raw_feat; 65889580Smsmith u_int16_t sc_cache_feat; 65989580Smsmith 66089580Smsmith gdt_evt_data sc_dvr; 661114001Sscottl char oem_name[8]; 66289580Smsmith 66389580Smsmith struct cam_sim *sims[GDT_MAXBUS]; 66489580Smsmith struct cam_path *paths[GDT_MAXBUS]; 66589580Smsmith 66692739Salfred void (*sc_copy_cmd)(struct gdt_softc *, struct gdt_ccb *); 66792739Salfred u_int8_t (*sc_get_status)(struct gdt_softc *); 66892739Salfred void (*sc_intr)(struct gdt_softc *, struct gdt_intr_ctx *); 66992739Salfred void (*sc_release_event)(struct gdt_softc *); 67092739Salfred void (*sc_set_sema0)(struct gdt_softc *); 67192739Salfred int (*sc_test_busy)(struct gdt_softc *); 67289580Smsmith 67389580Smsmith TAILQ_ENTRY(gdt_softc) links; 67489580Smsmith}; 67589580Smsmith 67689580Smsmith/* 67789580Smsmith * A command control block, one for each corresponding command index of the 67889580Smsmith * controller. 67989580Smsmith */ 68089580Smsmithstruct gdt_ccb { 681156139Sscottl u_int8_t *gc_scratch; 682156139Sscottl bus_addr_t gc_scratch_busbase; 68389580Smsmith union ccb *gc_ccb; 68489580Smsmith gdt_ucmd_t *gc_ucmd; 68589580Smsmith bus_dmamap_t gc_dmamap; 686274487Sjhb struct callout gc_timeout; 68789580Smsmith int gc_map_flag; 68889580Smsmith u_int8_t gc_service; 68989580Smsmith u_int8_t gc_cmd_index; 69089580Smsmith u_int8_t gc_flags; 69189580Smsmith#define GDT_GCF_UNUSED 0 69289580Smsmith#define GDT_GCF_INTERNAL 1 69389580Smsmith#define GDT_GCF_SCREEN 2 69489580Smsmith#define GDT_GCF_SCSI 3 69589580Smsmith#define GDT_GCF_IOCTL 4 696156139Sscottl u_int16_t gc_cmd_len; 697156139Sscottl u_int8_t gc_cmd[GDT_CMD_SZ]; 69889580Smsmith SLIST_ENTRY(gdt_ccb) sle; 69989580Smsmith}; 70089580Smsmith 70189580Smsmith 70292739Salfredint iir_init(struct gdt_softc *); 70392739Salfredvoid iir_free(struct gdt_softc *); 70492739Salfredvoid iir_attach(struct gdt_softc *); 70592739Salfredvoid iir_intr(void *arg); 70689580Smsmith 707143063Sjoerg#ifdef __CC_SUPPORTS___INLINE__ 70889580Smsmith/* These all require correctly aligned buffers */ 70992739Salfredstatic __inline__ void gdt_enc16(u_int8_t *, u_int16_t); 71092739Salfredstatic __inline__ void gdt_enc32(u_int8_t *, u_int32_t); 71192739Salfredstatic __inline__ u_int16_t gdt_dec16(u_int8_t *); 71292739Salfredstatic __inline__ u_int32_t gdt_dec32(u_int8_t *); 71389580Smsmith 71489580Smsmithstatic __inline__ void 715154648Srwatsongdt_enc16(u_int8_t *addr, u_int16_t value) 71689580Smsmith{ 71789580Smsmith *(u_int16_t *)addr = htole16(value); 71889580Smsmith} 71989580Smsmith 72089580Smsmithstatic __inline__ void 721154648Srwatsongdt_enc32(u_int8_t *addr, u_int32_t value) 72289580Smsmith{ 72389580Smsmith *(u_int32_t *)addr = htole32(value); 72489580Smsmith} 72589580Smsmith 72689580Smsmithstatic __inline__ u_int16_t 727154648Srwatsongdt_dec16(u_int8_t *addr) 72889580Smsmith{ 729114001Sscottl return le16toh(*(u_int16_t *)addr); 73089580Smsmith} 73189580Smsmith 73289580Smsmithstatic __inline__ u_int32_t 733154648Srwatsongdt_dec32(u_int8_t *addr) 73489580Smsmith{ 735114001Sscottl return le32toh(*(u_int32_t *)addr); 73689580Smsmith} 73789580Smsmith#endif 73889580Smsmith 73989580Smsmithextern u_int8_t gdt_polling; 74089580Smsmith 741274487Sjhbstruct cdev *gdt_make_dev(struct gdt_softc *gdt); 742130585Sphkvoid gdt_destroy_dev(struct cdev *dev); 74389580Smsmithvoid gdt_next(struct gdt_softc *gdt); 74489580Smsmithvoid gdt_free_ccb(struct gdt_softc *gdt, struct gdt_ccb *gccb); 74589580Smsmith 746274487Sjhbvoid gdt_store_event(u_int16_t source, u_int16_t idx, 74789580Smsmith gdt_evt_data *evt); 74889580Smsmithint gdt_read_event(int handle, gdt_evt_str *estr); 74989580Smsmithvoid gdt_readapp_event(u_int8_t app, gdt_evt_str *estr); 75089580Smsmithvoid gdt_clear_events(void); 75189580Smsmith 75289580Smsmith#endif 753