f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * This file and its contents are supplied under the terms of the
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * Common Development and Distribution License ("CDDL"), version 1.0.
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * You may only use this file in accordance with the terms of version
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * 1.0 of the CDDL.
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * A full copy of the text of the CDDL should have accompanied this
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * source. A copy of the CDDL is also available via the Internet at
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * Copyright 2013 STEC, Inc. All rights reserved.
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define DRV_VER_COMPL DRV_VERSION "." DRV_BUILD_ID
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta/* Attach progress flags */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_IODONE_WDEBUG 3 /* I/O - debug stuff */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * Stuff from Linux
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * SENSE KEYS
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_WRITEL(DEV, VAL, OFF) skd_reg_write32(DEV, VAL, OFF)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_READL(DEV, OFF) skd_reg_read32(DEV, OFF)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_WRITEQ(DEV, VAL, OFF) skd_reg_write64(DEV, VAL, OFF)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta/* Capability lists */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * End Stuff from Linux
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_DMA_HIGH_64BIT_ADDRESS (uint64_t)0xffffffffffffffff
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_DMA_HIGH_32BIT_ADDRESS (uint64_t)0xffffffff
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_DMA_ADDRESS_ALIGNMENT (uint64_t)SG_BOUNDARY
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_DMA_MAX_XFER_SIZE (uint64_t)0xfffffe00
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_DMA_SEGMENT_BOUNDARY (uint64_t)0xffffffff
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * SG elements are 32 bytes, so we can make this 4096 and still be under the
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * 128KB limit. That allows 4096*4K = 16M xfer size
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta/* 5 bits of uniqifier, 0xF800 */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define SKD_TIMER_MINUTES(minutes) ((minutes)*(60))
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * NOTE: INTR_LOCK() should be held prior to grabbing WAITQ_LOCK() if both
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta * are needed.
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define INTR_LOCK(skdev) mutex_enter(&skdev->skd_intr_mutex)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define INTR_UNLOCK(skdev) mutex_exit(&skdev->skd_intr_mutex)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define INTR_LOCK_HELD(skdev) MUTEX_HELD(&skdev->skd_intr_mutex)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define ADAPTER_STATE_LOCK(skdev) mutex_enter(&skdev->skd_lock_mutex)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#define ADAPTER_STATE_UNLOCK(skdev) mutex_exit(&skdev->skd_lock_mutex)
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta SKD_DRVR_STATE_LOAD, /* 0 when driver first loaded */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta SKD_DRVR_STATE_IDLE, /* 1 when device goes offline */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta SKD_DRVR_STATE_STOPPING, /* 10 when driver is unloading */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta/* NOTE: mbu_t users should name this field "mbu". */
f52228b83292315dabb975359cdcf9db662845b2Joe Betetatypedef union {
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta char inq_serial_num[13]; /* 12 chars plus null term */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta char id_str[128]; /* holds a composite name (pci + sernum) */
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta /* AIF (Advanced Interrupt Framework) support */
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_disable_interrupts(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_isr_completion_posted(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_recover_requests(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_log_skdev(struct skd_device *skdev, const char *event);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_restart_device(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_destruct(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic int skd_unquiesce_dev(struct skd_device *skdev);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_send_special_fitmsg(struct skd_device *skdev,
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_end_request(struct skd_device *skdev,
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_log_skmsg(struct skd_device *skdev,
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta struct skd_fitmsg_context *skmsg, const char *event);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_log_skreq(struct skd_device *skdev,
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta struct skd_request_context *skreq, const char *event);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic void skd_send_fitmsg(struct skd_device *skdev,
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic const char *skd_drive_state_to_str(int state);
f52228b83292315dabb975359cdcf9db662845b2Joe Betetastatic const char *skd_skdev_state_to_str(enum skd_drvr_state state);
f52228b83292315dabb975359cdcf9db662845b2Joe Beteta#endif /* _SKD_H */