2908d778ab
This is the end point of the separate aic94xx driver based on the original driver and transport class from Luben Tuikov <ltuikov@yahoo.com> The log of the separate development is: Alexis Bruemmer: o aic94xx: fix hotplug/unplug for expanderless systems o aic94xx: disable split completion timer/setting by default o aic94xx: wide port off expander support o aic94xx: remove various inline functions o aic94xx: use bitops o aic94xx: remove queue comment o aic94xx: remove sas_common.c o aic94xx: sas remove depot's o aic94xx: use available list_for_each_entry_safe_reverse() o aic94xx: sas header file merge James Bottomley: o aic94xx: fix TF_TMF_NO_CTX processing o aic94xx: convert to request_firmware interface o aic94xx: fix hotplug/unplug o aic94xx: add link error counts to the expander phys o aic94xx: add transport class phy reset capability o aic94xx: remove local_attached flag o Remove README o Fixup Makefile variable for libsas rename o Rename sas->libsas o aic94xx: correct return code for sas_discover_event o aic94xx: use parent backlink port o aic94xx: remove channel abstraction o aic94xx: fix routing algorithms o aic94xx: add backlink port o aic94xx: fix cascaded expander properties o aic94xx: fix sleep under lock o aic94xx: fix panic on module removal in complex topology o aic94xx: make use of the new sas_port o rename sas_port to asd_sas_port o Fix for eh_strategy_handler move o aic94xx: move entirely over to correct transport class formulation o remove last vestages of sas_rphy_alloc() o update for eh_timed_out move o Preliminary expander support for aic94xx o sas: remove event thread o minor warning cleanups o remove last vestiges of id mapping arrays o Further updates o Convert aic94xx over entirely to the transport class end device and o update aic94xx/sas to use the new sas transport class end device o [PATCH] aic94xx: attaching to the sas transport class o Add missing completion removal from prior patch o [PATCH] aic94xx: attaching to the sas transport class o Build fixes from akpm Jeff Garzik: o [scsi aic94xx] Remove ->owner from PCI info table Luben Tuikov: o initial aic94xx driver Mike Anderson: o aic94xx: fix panic on module insertion o aic94xx: stub out SATA_DEV case o aic94xx: compile warning cleanups o aic94xx: sas_alloc_task o aic94xx: ref count update o aic94xx nexus loss time value o [PATCH] aic94xx: driver assertion in non-x86 BIOS env Randy Dunlap: o libsas: externs not needed Robert Tarte: o aic94xx: sequence patch - fixes SATA support Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
115 lines
3.2 KiB
C
115 lines
3.2 KiB
C
/*
|
|
* Aic94xx SAS/SATA driver header file.
|
|
*
|
|
* Copyright (C) 2005 Adaptec, Inc. All rights reserved.
|
|
* Copyright (C) 2005 Luben Tuikov <luben_tuikov@adaptec.com>
|
|
*
|
|
* This file is licensed under GPLv2.
|
|
*
|
|
* This file is part of the aic94xx driver.
|
|
*
|
|
* The aic94xx driver is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; version 2 of the
|
|
* License.
|
|
*
|
|
* The aic94xx driver is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with the aic94xx driver; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* $Id: //depot/aic94xx/aic94xx.h#31 $
|
|
*/
|
|
|
|
#ifndef _AIC94XX_H_
|
|
#define _AIC94XX_H_
|
|
|
|
#include <linux/slab.h>
|
|
#include <linux/ctype.h>
|
|
#include <scsi/libsas.h>
|
|
|
|
#define ASD_DRIVER_NAME "aic94xx"
|
|
#define ASD_DRIVER_DESCRIPTION "Adaptec aic94xx SAS/SATA driver"
|
|
|
|
#define asd_printk(fmt, ...) printk(KERN_NOTICE ASD_DRIVER_NAME ": " fmt, ## __VA_ARGS__)
|
|
|
|
#ifdef ASD_ENTER_EXIT
|
|
#define ENTER printk(KERN_NOTICE "%s: ENTER %s\n", ASD_DRIVER_NAME, \
|
|
__FUNCTION__)
|
|
#define EXIT printk(KERN_NOTICE "%s: --EXIT %s\n", ASD_DRIVER_NAME, \
|
|
__FUNCTION__)
|
|
#else
|
|
#define ENTER
|
|
#define EXIT
|
|
#endif
|
|
|
|
#ifdef ASD_DEBUG
|
|
#define ASD_DPRINTK asd_printk
|
|
#else
|
|
#define ASD_DPRINTK(fmt, ...)
|
|
#endif
|
|
|
|
/* 2*ITNL timeout + 1 second */
|
|
#define AIC94XX_SCB_TIMEOUT (5*HZ)
|
|
|
|
extern kmem_cache_t *asd_dma_token_cache;
|
|
extern kmem_cache_t *asd_ascb_cache;
|
|
extern char sas_addr_str[2*SAS_ADDR_SIZE + 1];
|
|
|
|
static inline void asd_stringify_sas_addr(char *p, const u8 *sas_addr)
|
|
{
|
|
int i;
|
|
for (i = 0; i < SAS_ADDR_SIZE; i++, p += 2)
|
|
snprintf(p, 3, "%02X", sas_addr[i]);
|
|
*p = '\0';
|
|
}
|
|
|
|
static inline void asd_destringify_sas_addr(u8 *sas_addr, const char *p)
|
|
{
|
|
int i;
|
|
for (i = 0; i < SAS_ADDR_SIZE; i++) {
|
|
u8 h, l;
|
|
if (!*p)
|
|
break;
|
|
h = isdigit(*p) ? *p-'0' : *p-'A'+10;
|
|
p++;
|
|
l = isdigit(*p) ? *p-'0' : *p-'A'+10;
|
|
p++;
|
|
sas_addr[i] = (h<<4) | l;
|
|
}
|
|
}
|
|
|
|
struct asd_ha_struct;
|
|
struct asd_ascb;
|
|
|
|
int asd_read_ocm(struct asd_ha_struct *asd_ha);
|
|
int asd_read_flash(struct asd_ha_struct *asd_ha);
|
|
|
|
int asd_dev_found(struct domain_device *dev);
|
|
void asd_dev_gone(struct domain_device *dev);
|
|
|
|
void asd_invalidate_edb(struct asd_ascb *ascb, int edb_id);
|
|
|
|
int asd_execute_task(struct sas_task *, int num, unsigned long gfp_flags);
|
|
|
|
/* ---------- TMFs ---------- */
|
|
int asd_abort_task(struct sas_task *);
|
|
int asd_abort_task_set(struct domain_device *, u8 *lun);
|
|
int asd_clear_aca(struct domain_device *, u8 *lun);
|
|
int asd_clear_task_set(struct domain_device *, u8 *lun);
|
|
int asd_lu_reset(struct domain_device *, u8 *lun);
|
|
int asd_query_task(struct sas_task *);
|
|
|
|
/* ---------- Adapter and Port management ---------- */
|
|
int asd_clear_nexus_port(struct asd_sas_port *port);
|
|
int asd_clear_nexus_ha(struct sas_ha_struct *sas_ha);
|
|
|
|
/* ---------- Phy Management ---------- */
|
|
int asd_control_phy(struct asd_sas_phy *phy, enum phy_func func);
|
|
|
|
#endif
|