/* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2005-06 Adaptec, Inc. * Copyright (c) 2005-06 Adaptec Inc., Achim Leubner * Copyright (c) 2000 Michael Smith * Copyright (c) 2000 Scott Long * Copyright (c) 2000 BSDi * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: /repoman/r/ncvs/src/sys/sys/aac_ioctl.h, * v 1.11 2004/12/09 22:20:25 scottl Exp $ */ #ifndef _AAC_IOCTL_H_ #define _AAC_IOCTL_H_ #ifdef __cplusplus extern "C" { #endif /* * IOCTL Interface */ /* Macro definitions for IOCTL function control codes */ #define CTL_CODE(function, method) \ ((4<< 16) | ((function) << 2) | (method)) /* Method codes for how buffers are passed for I/O and FS controls */ #define METHOD_BUFFERED 0 #define METHOD_NEITHER 3 /* IOCTL commands */ #define FSACTL_SENDFIB CTL_CODE(2050, METHOD_BUFFERED) #define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED) #define FSACTL_DELETE_DISK 0x163 #define FSACTL_QUERY_DISK 0x173 #define FSACTL_OPEN_GET_ADAPTER_FIB CTL_CODE(2100, METHOD_BUFFERED) #define FSACTL_GET_NEXT_ADAPTER_FIB CTL_CODE(2101, METHOD_BUFFERED) #define FSACTL_CLOSE_GET_ADAPTER_FIB CTL_CODE(2102, METHOD_BUFFERED) #define FSACTL_MINIPORT_REV_CHECK CTL_CODE(2107, METHOD_BUFFERED) #define FSACTL_GET_PCI_INFO CTL_CODE(2119, METHOD_BUFFERED) #define FSACTL_FORCE_DELETE_DISK CTL_CODE(2120, METHOD_NEITHER) #define FSACTL_REGISTER_FIB_SEND CTL_CODE(2136, METHOD_BUFFERED) #define FSACTL_GET_CONTAINERS 2131 #define FSACTL_GET_VERSION_MATCHING CTL_CODE(2137, METHOD_BUFFERED) #define FSACTL_SEND_LARGE_FIB CTL_CODE(2138, METHOD_BUFFERED) #define FSACTL_GET_FEATURES CTL_CODE(2139, METHOD_BUFFERED) #pragma pack(1) struct aac_revision { uint32_t compat; uint32_t version; uint32_t build; }; struct aac_get_adapter_fib { uint32_t context; int32_t wait; uint32_t aif_fib; /* RAID config app is 32bit */ }; struct aac_pci_info { uint32_t bus; uint32_t slot; }; struct aac_query_disk { int32_t container_no; int32_t bus; int32_t target; int32_t lun; uint32_t valid; uint32_t locked; uint32_t deleted; int32_t instance; char disk_device_name[10]; uint32_t unmapped; }; struct aac_delete_disk { int32_t nt_disk_no; int32_t container_no; }; /* * The following definitions come from Adaptec: */ typedef union { struct { uint32_t largeLBA : 1; /* disk support greater 2TB */ uint32_t IoctlBuf : 1; /* ARCIOCTL call support */ uint32_t AIFSupport: 1; /* AIF support */ uint32_t JBODSupport:1; /* firmware+driver both support JBOD */ uint32_t fReserved : 28; } fBits; uint32_t fValue; } featuresState; struct aac_features { featuresState feat; uint32_t data[31]; uint32_t reserved[32]; }; #pragma pack() /* * Aligned structure definitions for variable declarations that require * alignment. * * Normally the packed structures are defined in a way that if the initial * member is aligned, then the following members will also be aligned. So * we need only to make sure the packed structure, ie. the first member, is * aligned to satisfy alignment requirement. */ union aac_revision_align { struct aac_revision d; uint32_t dummy; }; union aac_get_adapter_fib_align { struct aac_get_adapter_fib d; uint32_t dummy; }; union aac_pci_info_align { struct aac_pci_info d; uint32_t dummy; }; union aac_query_disk_align { struct aac_query_disk d; int32_t dummy; }; union aac_delete_disk_align { struct aac_delete_disk d; int32_t dummy; }; union aac_features_align { struct aac_features d; uint32_t dummy; }; #ifdef __cplusplus } #endif #endif /* _AAC_IOCTL_H_ */