hptiop.h revision db9b6e89ea8dc3f32dea1125c672de1a9710be7c
1ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team/* 2ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * HighPoint RR3xxx controller driver for Linux 3db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team * Copyright (C) 2006-2007 HighPoint Technologies, Inc. All Rights Reserved. 4ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * 5ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * This program is free software; you can redistribute it and/or modify 6ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * it under the terms of the GNU General Public License as published by 7ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * the Free Software Foundation; version 2 of the License. 8ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * 9ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * This program is distributed in the hope that it will be useful, 10ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * but WITHOUT ANY WARRANTY; without even the implied warranty of 11ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * GNU General Public License for more details. 13ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * 14ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * Please report bugs/comments/suggestions to linux@highpoint-tech.com 15ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * 16ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * For more information, visit http://www.highpoint-tech.com 17ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team */ 18ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#ifndef _HPTIOP_H_ 19ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define _HPTIOP_H_ 20ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 21ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iopmu 22ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 23ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 resrved0[4]; 24ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_msgaddr0; 25ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_msgaddr1; 26ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_msgaddr0; 27ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_msgaddr1; 28ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_doorbell; 29ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_intstatus; 30ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_intmask; 31ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_doorbell; 32ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_intstatus; 33ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_intmask; 34ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 reserved1[2]; 35ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbound_queue; 36ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbound_queue; 37ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 38ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 39ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_EMPTY 0xffffffff 40ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_MASK_HOST_BITS 0xf0000000 41ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_ADDR_HOST_BIT 0x80000000 42db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team#define IOPMU_QUEUE_REQUEST_SIZE_BIT 0x40000000 43db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team#define IOPMU_QUEUE_REQUEST_RESULT_BIT 0x40000000 44ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 45ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_MSG0 1 46ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_MSG1 2 47ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_DOORBELL 4 48ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_POSTQUEUE 8 49ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_PCI 0x10 50ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 51ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_MSG0 1 52ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_MSG1 2 53ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_DOORBELL 4 54ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_ERROR 8 55ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_POSTQUEUE 0x10 56ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 57ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iopmu_message { 58ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team /* host-to-iop messages */ 59ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_NOP = 0, 60ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_RESET, 61ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_FLUSH, 62ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_SHUTDOWN, 63ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_STOP_BACKGROUND_TASK, 64ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_START_BACKGROUND_TASK, 65ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_INBOUND_MSG0_MAX = 0xff, 66ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team /* iop-to-host messages */ 67ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_0 = 0x100, 68ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_MAX = 0x1ff, 69ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_0 = 0x200, 70ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_MAX = 0x2ff, 71ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_0 = 0x300, 72ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_MAX = 0x3ff, 73ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 74ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 75ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_header 76ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 77ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 size; 78ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 type; 79ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 flags; 80ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 result; 81ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 context; /* host context */ 82ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 context_hi32; 83ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 84ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 85ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_SYNC_REQUEST 1 86ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_BIST_REQUEST 2 87ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_REMAPPED 4 88ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_OUTPUT_CONTEXT 8 89ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 90ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iop_request_type { 91ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_GET_CONFIG = 0, 92ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_SET_CONFIG, 93ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_BLOCK_COMMAND, 94ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_SCSI_COMMAND, 95ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_IOCTL_COMMAND, 96ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_REQUEST_TYPE_MAX 97ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 98ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 99ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iop_result_type { 100ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_PENDING = 0, 101ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_SUCCESS, 102ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_FAIL, 103ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_BUSY, 104ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_RESET, 105ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_INVALID_REQUEST, 106ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_BAD_TARGET, 107ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team IOP_RESULT_MODE_SENSE_CHECK_CONDITION, 108ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 109ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 110ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_get_config 111ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 112ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iop_request_header header; 113ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 interface_version; 114ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 firmware_version; 115ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 max_requests; 116ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 request_size; 117ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 max_sg_count; 118ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 data_transfer_length; 119ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 alignment_mask; 120ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 max_devices; 121ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 sdram_size; 122ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 123ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 124ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_set_config 125ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 126ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iop_request_header header; 127ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 iop_id; 128db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team __le16 vbus_id; 129db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team __le16 max_host_request_size; 130ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 reserve[6]; 131ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 132ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 133ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iopsg 134ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 135ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 size; 136ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 eot; /* non-zero: end of table */ 137ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le64 pci_address; 138ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 139ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 140ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_block_command 141ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 142ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iop_request_header header; 143ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 channel; 144ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 target; 145ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 lun; 146ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 pad1; 147ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le16 command; /* IOP_BLOCK_COMMAND_{READ,WRITE} */ 148ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le16 sectors; 149ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le64 lba; 150ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iopsg sg_list[1]; 151ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 152ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 153ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_READ 1 154ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_WRITE 2 155ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_VERIFY 3 156ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_FLUSH 4 157ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_SHUTDOWN 5 158ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 159ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_scsi_command 160ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 161ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iop_request_header header; 162ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 channel; 163ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 target; 164ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 lun; 165ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 pad1; 166ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 cdb[16]; 167ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 dataxfer_length; 168ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iopsg sg_list[1]; 169ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 170ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 171ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_ioctl_command 172ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 173ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iop_request_header header; 174ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 ioctl_code; 175ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 inbuf_size; 176ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 outbuf_size; 177ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team __le32 bytes_returned; 178ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u8 buf[1]; 179ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team /* out data should be put at buf[(inbuf_size+3)&~3] */ 180ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 181ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 182ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPTIOP_MAX_REQUESTS 256u 183ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 184ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hptiop_request { 185ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hptiop_request * next; 186ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team void * req_virt; 187ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 req_shifted_phy; 188ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct scsi_cmnd * scp; 189ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team int index; 190ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 191ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 192ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_scsi_pointer { 193ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team int mapped; 194ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team int sgcnt; 195ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team dma_addr_t dma_handle; 196ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 197ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 198ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_SCP(scp) ((struct hpt_scsi_pointer *)&(scp)->SCp) 199ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 200ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hptiop_hba { 201ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hpt_iopmu __iomem * iop; 202ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct Scsi_Host * host; 203ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct pci_dev * pcidev; 204ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 205ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team /* IOP config info */ 206db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team u32 interface_version; 207ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 firmware_version; 208ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 sdram_size; 209ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 max_devices; 210ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 max_requests; 211ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 max_request_size; 212ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 max_sg_descriptors; 213ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 214ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 req_size; /* host-allocated request buffer size */ 215db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team 216db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team int iopintf_v2: 1; 217db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team int initialized: 1; 218db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team int msg_done: 1; 219ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 220ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hptiop_request * req_list; 221ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hptiop_request reqs[HPTIOP_MAX_REQUESTS]; 222ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 223ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team /* used to free allocated dma area */ 224ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team void * dma_coherent; 225ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team dma_addr_t dma_coherent_handle; 226ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 227ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team atomic_t reset_count; 228ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team atomic_t resetting; 229ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 230ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team wait_queue_head_t reset_wq; 231ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team wait_queue_head_t ioctl_wq; 232ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 233ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 234ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_ioctl_k 235ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{ 236ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team struct hptiop_hba * hba; 237ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 ioctl_code; 238ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 inbuf_size; 239ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 outbuf_size; 240ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team void * inbuf; 241ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team void * outbuf; 242ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team u32 * bytes_returned; 243ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team void (*done)(struct hpt_ioctl_k *); 244ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team int result; /* HPT_IOCTL_RESULT_ */ 245ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team}; 246ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 247ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_IOCTL_RESULT_OK 0 248ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_IOCTL_RESULT_FAILED (-1) 249ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 250ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#if 0 251ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define dprintk(fmt, args...) do { printk(fmt, ##args); } while(0) 252ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#else 253ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define dprintk(fmt, args...) 254ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#endif 255ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team 256ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#endif 257