565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov/*
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * This file and its contents are supplied under the terms of the
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * Common Development and Distribution License ("CDDL"), version 1.0.
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * You may only use this file in accordance with the terms of version
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * 1.0 of the CDDL.
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov *
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * A full copy of the text of the CDDL should have accompanied this
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * source. A copy of the CDDL is also available via the Internet at
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * http://www.illumos.org/license/CDDL.
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov */
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov/*
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov * Copyright 2016 Nexenta Systems, Inc.
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov */
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#ifndef _PVSCSI_VAR_H_
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define _PVSCSI_VAR_H_
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_dma_buf {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_handle_t dma_handle;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov caddr_t addr;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint64_t pa;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov size_t real_length;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_acc_handle_t acc_handle;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_dma_buf_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_TGT_PRIV_SIZE 2
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_CDB_EXT 0x0001
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_SCB_EXT 0x0002
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_PRIV_EXT 0x0004
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_TAG 0x0008
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_IO_READ 0x0010
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_IO_IOPB 0x0040
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_DONE 0x0080
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_DMA_VALID 0x0100
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_XARQ 0x0200
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_HW_STATUS 0x0400
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_TIMED_OUT 0x0800
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_ABORTED 0x1000
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_RESET_BUS 0x2000
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_RESET_DEV 0x4000
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAG_TRANSPORT 0x8000
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov/* Flags that must remain during SCSI packet retransmission */
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAGS_PERSISTENT \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (PVSCSI_FLAG_CDB_EXT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_SCB_EXT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_PRIV_EXT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_TAG |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_IO_READ |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_IO_IOPB |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_DMA_VALID |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_XARQ)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAGS_RESET \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (PVSCSI_FLAG_RESET_BUS |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_RESET_DEV)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAGS_NON_HW_COMPLETION \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (PVSCSI_FLAG_TIMED_OUT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_ABORTED |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAGS_RESET)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAGS_COMPLETION \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (PVSCSI_FLAG_HW_STATUS |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAGS_NON_HW_COMPLETION)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_FLAGS_EXT \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (PVSCSI_FLAG_CDB_EXT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_SCB_EXT |\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov PVSCSI_FLAG_PRIV_EXT)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_cmd_ctx {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_dma_buf_t dma_buf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct pvscsi_cmd *cmd;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_node_t list;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_cmd_ctx_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_cmp_desc_stat {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uchar_t scsi_status;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint32_t host_status;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint64_t data_len;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_cmp_desc_stat_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_MAX_IO_PAGES 256
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_MAX_IO_SIZE (PVSCSI_MAX_IO_PAGES * PAGE_SIZE)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_MAX_SG_SIZE (PVSCSI_MAX_IO_PAGES + 1)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_cmd {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct scsi_pkt *pkt;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint8_t cmd_cdb[SCSI_CDB_SIZE];
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct scsi_arq_status cmd_scb;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint64_t tgt_priv[PVSCSI_TGT_PRIV_SIZE];
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov size_t tgtlen;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov size_t cmdlen;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov size_t statuslen;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint8_t tag;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int flags;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ulong_t dma_count;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_cmp_desc_stat_t cmp_stat;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_cmd_ctx_t *ctx;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_handle_t cmd_dmahdl;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_cookie_t cmd_dmac;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmd_dmaccount;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmd_winindex;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmd_nwin;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov off_t cmd_dma_offset;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov size_t cmd_dma_len;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmd_dma_count;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmd_total_dma_count;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int cmd_target;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_node_t cmd_queue_node;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov clock_t timeout_lbolt;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct pvscsi_softc *cmd_pvs;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct pvscsi_cmd *next_cmd;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct pvscsi_cmd *tail_cmd;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct buf *arqbuf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_cookie_t arqc;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_handle_t arqhdl;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int cmd_rqslen;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct scsi_pkt cached_pkt;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_cookie_t cached_cookies[PVSCSI_MAX_SG_SIZE];
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_cmd_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define AP2PRIV(ap) ((ap)->a_hba_tran->tran_hba_private)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define CMD2PKT(cmd) ((struct scsi_pkt *)((cmd)->pkt))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PKT2CMD(pkt) ((pvscsi_cmd_t *)((pkt)->pkt_ha_private))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define SDEV2PRIV(sd) ((sd)->sd_address.a_hba_tran->tran_hba_private)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define TRAN2PRIV(tran) ((pvscsi_softc_t *)(tran)->tran_hba_private)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define CMD_CTX_SGLIST_VA(cmd_ctx) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((struct PVSCSISGElement *) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (((pvscsi_cmd_ctx_t *)(cmd_ctx))->dma_buf.addr))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define CMD_CTX_SGLIST_PA(cmd_ctx) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((((pvscsi_cmd_ctx_t *)(cmd_ctx))->dma_buf.pa))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_msg {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct pvscsi_softc *msg_pvs;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int type;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int target;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_msg_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov/* Driver-wide flags */
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_DRIVER_SHUTDOWN 0x01
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_HBA_QUIESCED 0x02
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_HBA_QUIESCE_PENDING 0x04
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_HBA_AUTO_REQUEST_SENSE 0x08
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define HBA_IS_QUIESCED(pvs) (((pvs)->flags & PVSCSI_HBA_QUIESCED) != 0)
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define HBA_QUIESCE_PENDING(pvs) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (((pvs)->flags & PVSCSI_HBA_QUIESCE_PENDING) != 0 && \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((pvs)->cmd_queue_len == 0))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_softc {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov dev_info_t *dip;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int instance;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov scsi_hba_tran_t *tran;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_attr_t hba_dma_attr;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_attr_t io_dma_attr;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_dma_attr_t ring_dma_attr;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_dma_buf_t rings_state_buf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_dma_buf_t req_ring_buf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t req_pages;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t req_depth;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_dma_buf_t cmp_ring_buf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t cmp_pages;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_dma_buf_t msg_ring_buf;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov uint_t msg_pages;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_acc_handle_t pci_config_handle;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_acc_handle_t mmio_handle;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov caddr_t mmio_base;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int intr_type;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int intr_size;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int intr_cnt;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int intr_pri;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int flags;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_intr_handle_t *intr_htable;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov pvscsi_cmd_ctx_t *cmd_ctx;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_t cmd_ctx_pool;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_t cmd_queue;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int cmd_queue_len;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kcondvar_t wd_condvar;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kmutex_t mutex;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kmutex_t rx_mutex;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kmutex_t tx_mutex;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kmutex_t intr_mutex;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov struct kmem_cache *cmd_cache;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_t devnodes;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kcondvar_t syncvar;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kcondvar_t quiescevar;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov kthread_t *wd_thread;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int intr_lock_counter;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int num_pollers;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_taskq_t *comp_tq;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ddi_taskq_t *msg_tq;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_softc_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankovtypedef struct pvscsi_device {
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov list_node_t list;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov int target;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov dev_info_t *pdip;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov dev_info_t *parent;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov} pvscsi_device_t;
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define REQ_RING(pvs) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((struct PVSCSIRingReqDesc *) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (((pvscsi_softc_t *)(pvs))->req_ring_buf.addr))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define CMP_RING(pvs) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((struct PVSCSIRingCmpDesc *) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (((pvscsi_softc_t *)(pvs))->cmp_ring_buf.addr))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define MSG_RING(pvs) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((struct PVSCSIRingMsgDesc *) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (((pvscsi_softc_t *)(pvs))->msg_ring_buf.addr))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define RINGS_STATE(pvs) \
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov ((struct PVSCSIRingsState *)(((pvscsi_softc_t *)\
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov (pvs))->rings_state_buf.addr))
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_INITIAL_SSTATE_ITEMS 16
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define SENSE_BUFFER_SIZE SENSE_LENGTH
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define USECS_TO_WAIT 1000
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_MAXTGTS 16
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PAGE_SIZE 4096
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PAGE_SHIFT 12
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_DEFAULT_NUM_PAGES_PER_RING 8
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#define PVSCSI_DEFAULT_NUM_PAGES_MSG_RING 1
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov
565657ca18725b8f8dbe5b93704cc1d173be9d65Yuri Pankov#endif /* _PVSCSI_VAR_H_ */