xref: /onnv-gate/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_scsa.h (revision 12977:19cd6b4c098c)
110696SDavid.Hollister@Sun.COM /*
210696SDavid.Hollister@Sun.COM  * CDDL HEADER START
310696SDavid.Hollister@Sun.COM  *
410696SDavid.Hollister@Sun.COM  * The contents of this file are subject to the terms of the
510696SDavid.Hollister@Sun.COM  * Common Development and Distribution License (the "License").
610696SDavid.Hollister@Sun.COM  * You may not use this file except in compliance with the License.
710696SDavid.Hollister@Sun.COM  *
810696SDavid.Hollister@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
910696SDavid.Hollister@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1010696SDavid.Hollister@Sun.COM  * See the License for the specific language governing permissions
1110696SDavid.Hollister@Sun.COM  * and limitations under the License.
1210696SDavid.Hollister@Sun.COM  *
1310696SDavid.Hollister@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1410696SDavid.Hollister@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1510696SDavid.Hollister@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1610696SDavid.Hollister@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1710696SDavid.Hollister@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1810696SDavid.Hollister@Sun.COM  *
1910696SDavid.Hollister@Sun.COM  * CDDL HEADER END
20*12977Sjesse.butler@oracle.com  */
21*12977Sjesse.butler@oracle.com /*
22*12977Sjesse.butler@oracle.com  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
2310696SDavid.Hollister@Sun.COM  */
2410696SDavid.Hollister@Sun.COM /*
2510696SDavid.Hollister@Sun.COM  * SCSI (SCSA) midlayer interface for PMC drier.
2610696SDavid.Hollister@Sun.COM  */
2710696SDavid.Hollister@Sun.COM #ifndef _PMCS_SCSA_H
2810696SDavid.Hollister@Sun.COM #define	_PMCS_SCSA_H
2910696SDavid.Hollister@Sun.COM #ifdef	__cplusplus
3010696SDavid.Hollister@Sun.COM extern "C" {
3110696SDavid.Hollister@Sun.COM #endif
3210696SDavid.Hollister@Sun.COM 
3310696SDavid.Hollister@Sun.COM #include <sys/scsi/scsi_types.h>
3410696SDavid.Hollister@Sun.COM 
3510696SDavid.Hollister@Sun.COM #define	ADDR2TRAN(ap)		((ap)->a_hba_tran)
3610696SDavid.Hollister@Sun.COM #define	ADDR2PMC(ap)		(ITRAN2PMC(ADDR2TRAN(ap)))
3710696SDavid.Hollister@Sun.COM 
3810696SDavid.Hollister@Sun.COM #define	CMD2TRAN(cmd)		(CMD2PKT(cmd)->pkt_address.a_hba_tran)
3910696SDavid.Hollister@Sun.COM #define	CMD2PMC(cmd)		(ITRAN2PMC(CMD2TRAN(cmd)))
4010696SDavid.Hollister@Sun.COM 
4110696SDavid.Hollister@Sun.COM #define	PKT2ADDR(pkt)		(&((pkt)->pkt_address))
4210696SDavid.Hollister@Sun.COM #define	PKT2CMD(pkt)		((pmcs_cmd_t *)(pkt->pkt_ha_private))
4310696SDavid.Hollister@Sun.COM #define	CMD2PKT(sp)		(sp->cmd_pkt)
4410696SDavid.Hollister@Sun.COM #define	PMCS_STATUS_LEN		264
4510696SDavid.Hollister@Sun.COM 
4610696SDavid.Hollister@Sun.COM #define	TRAN2PMC(tran)		((pmcs_hw_t *)(tran)->tran_hba_private)
4710696SDavid.Hollister@Sun.COM #define	ITRAN2PMC(tran) \
4810696SDavid.Hollister@Sun.COM 	(((pmcs_iport_t *)(tran)->tran_hba_private)->pwp)
4910696SDavid.Hollister@Sun.COM #define	ITRAN2IPORT(tran) \
5010696SDavid.Hollister@Sun.COM 	((pmcs_iport_t *)(tran)->tran_hba_private)
5110696SDavid.Hollister@Sun.COM 
5210696SDavid.Hollister@Sun.COM /*
5310696SDavid.Hollister@Sun.COM  * Wrapper around scsi_pkt.
5410696SDavid.Hollister@Sun.COM  */
5510696SDavid.Hollister@Sun.COM struct pmcs_cmd {
5610696SDavid.Hollister@Sun.COM 	struct scsi_pkt		*cmd_pkt;	/* actual SCSI Packet */
5710696SDavid.Hollister@Sun.COM 	STAILQ_ENTRY(pmcs_cmd)	cmd_next;	/* linked list */
5810696SDavid.Hollister@Sun.COM 	pmcs_dmachunk_t		*cmd_clist;	/* list of dma chunks */
5910696SDavid.Hollister@Sun.COM 	pmcs_xscsi_t		*cmd_target;	/* Pointer to target */
6010696SDavid.Hollister@Sun.COM 	pmcs_lun_t		*cmd_lun;	/* Pointer to LU */
6110696SDavid.Hollister@Sun.COM 	uint32_t		cmd_tag;	/* PMC htag */
6210696SDavid.Hollister@Sun.COM 	uint8_t			cmd_satltag;	/* SATL tag */
6310696SDavid.Hollister@Sun.COM };
6410696SDavid.Hollister@Sun.COM 
6510696SDavid.Hollister@Sun.COM #define	SCSA_CDBLEN(sp)		sp->cmd_pkt->pkt_cdblen
6610696SDavid.Hollister@Sun.COM #define	SCSA_STSLEN(sp)		sp->cmd_pkt->pkt_scblen
6710696SDavid.Hollister@Sun.COM #define	SCSA_TGTLEN(sp)		sp->cmd_pkt->pkt_tgtlen
6810696SDavid.Hollister@Sun.COM 
69*12977Sjesse.butler@oracle.com #define	PMCS_WQ_RUN_SUCCESS		0
70*12977Sjesse.butler@oracle.com #define	PMCS_WQ_RUN_FAIL_RES		1 /* Failed to alloc rsrcs */
71*12977Sjesse.butler@oracle.com #define	PMCS_WQ_RUN_FAIL_RES_CMP	2 /* Failed rsrcs, but put on the CQ */
72*12977Sjesse.butler@oracle.com #define	PMCS_WQ_RUN_FAIL_OTHER		3 /* Any other failure */
7310696SDavid.Hollister@Sun.COM 
7410696SDavid.Hollister@Sun.COM int pmcs_scsa_init(pmcs_hw_t *, const ddi_dma_attr_t *);
7510696SDavid.Hollister@Sun.COM 
7610696SDavid.Hollister@Sun.COM void pmcs_latch_status(pmcs_hw_t *, pmcs_cmd_t *, uint8_t, uint8_t *,
7710696SDavid.Hollister@Sun.COM     size_t, char *);
7810696SDavid.Hollister@Sun.COM size_t pmcs_set_resid(struct scsi_pkt *, size_t, uint32_t);
7910696SDavid.Hollister@Sun.COM boolean_t pmcs_scsa_wq_run_one(pmcs_hw_t *, pmcs_xscsi_t *);
8010696SDavid.Hollister@Sun.COM void pmcs_scsa_wq_run(pmcs_hw_t *);
8110696SDavid.Hollister@Sun.COM void pmcs_scsa_cq_run(void *);
8210696SDavid.Hollister@Sun.COM 
8310696SDavid.Hollister@Sun.COM int pmcs_config_one(pmcs_hw_t *, uint64_t, int, long, dev_info_t **);
8410696SDavid.Hollister@Sun.COM 
8510696SDavid.Hollister@Sun.COM dev_info_t *pmcs_find_child_smp(pmcs_hw_t *, char *);
8610696SDavid.Hollister@Sun.COM int pmcs_config_one_smp(pmcs_hw_t *, uint64_t, dev_info_t **);
8710696SDavid.Hollister@Sun.COM 
8810696SDavid.Hollister@Sun.COM int pmcs_run_sata_special(pmcs_hw_t *, pmcs_xscsi_t *);
8910696SDavid.Hollister@Sun.COM #ifdef	__cplusplus
9010696SDavid.Hollister@Sun.COM }
9110696SDavid.Hollister@Sun.COM #endif
9210696SDavid.Hollister@Sun.COM #endif	/* _PMCS_SCSA_H */
93