root/src/add-ons/kernel/busses/scsi/53c8xx/53c8xx.h
/*
        Copyright 1999, Be Incorporated.   All Rights Reserved.
        This file may be used under the terms of the Be Sample Code License.
*/

#ifndef _SYM53C8XX_H
#define _SYM53C8XX_H

/*======================================================================*/
/* operating registers definitions */

#define sym_scntl0      0x00    /* scsi control 0 */
#define sym_scntl1      0x01    /* scsi control 1 */
#define sym_scntl2      0x02    /* scsi control 2 */
#define sym_scntl3      0x03    /* scsi control 3 */
#define sym_scid        0x04    /* scsi chip ID */
#define sym_sxfer       0x05    /* scsi transfer */
#define sym_sdid        0x06    /* scsi destination ID */
#define sym_gpreg       0x07    /* general purpose bits */
#define sym_sfbr        0x08    /* scsi first byte received */
#define sym_socl        0x09    /* scsi output control latch */
#define sym_ssid        0x0a    /* scsi selector ID */
#define sym_sbcl        0x0b    /* scsi bus control lines */
#define sym_dstat       0x0c    /* dma status */
#define sym_sstat0      0x0d    /* scsi status 0 */
#define sym_sstat1      0x0e    /* scsi status 1 */
#define sym_sstat2      0x0f    /* scsi status 2 */
#define sym_dsa         0x10    /* data structure address [4 bytes] */
#define sym_istat       0x14    /* interrupt status */
#define sym_ctest0      0x18    /* chip test 0 */
#define sym_ctest1      0x19    /* chip test 1 */
#define sym_ctest2      0x1a    /* chip test 2 */
#define sym_ctest3      0x1b    /* chip test 3 */
#define sym_temp        0x1c    /* temporary stack [4 bytes] */
#define sym_dfifo       0x20    /* dma fifo */
#define sym_ctest4      0x21    /* chip test 4 */
#define sym_ctest5      0x22    /* chip test 5 */
#define sym_ctest6      0x23    /* chip test 6 */
#define sym_dbc         0x24    /* dma byte counter [3 bytes] */
#define sym_dcmd        0x27    /* dma command */
#define sym_dnad        0x28    /* dma next address for data [4 bytes] */
#define sym_dsp         0x2c    /* dma scripts pointer [4 bytes] */
#define sym_dsps        0x30    /* dma scripts pointer save [4 bytes] */
#define sym_scratcha 0x34       /* general purpose scratch pad a [4 bytes] */
#define sym_dmode       0x38    /* dma mode */
#define sym_dien        0x39    /* dma interrupt enable */
#define sym_dwt         0x3a    /* dma watchdog timer */
#define sym_dcntl       0x3b    /* dma control */
#define sym_adder       0x3c    /* sum output of internal adder [4 bytes] */
#define sym_sien0       0x40    /* scsi interrupt enable 0 */
#define sym_sien1       0x41    /* scsi interrupt enable 1 */
#define sym_sist0       0x42    /* scsi interrupt status 0 */
#define sym_sist1       0x43    /* scsi interrupt status 1 */
#define sym_slpar       0x44    /* scsi longitudinal parity */
#define sym_macntl      0x46    /* memory access control */
#define sym_gpcntl      0x47    /* general purpose control */
#define sym_stime0      0x48    /* scsi timer 0 */
#define sym_stime1      0x49    /* scsi timer 1 */
#define sym_respid      0x4a    /* responce ID */
#define sym_stest0      0x4c    /* scsi test 0 */
#define sym_stest1      0x4d    /* scsi test 1 */
#define sym_stest2      0x4e    /* scsi test 2 */
#define sym_stest3      0x4f    /* scsi test 3 */
#define sym_sidl        0x50    /* scsi input data latch */
#define sym_stest4  0x52    /* new with 895/896 */
#define sym_sodl        0x54    /* scsi output data latch */
#define sym_sbdl        0x58    /* scsi bus data lines */
#define sym_scratchb 0x5c       /* general purpose scratch pad b [4 bytes] */


/*----------------------------------------------------------------------*/
/* operating registers bit definitions */

/* 0x00 - scntl0 (scsi control 0) bit definitions */

#define sym_scntl0_trg  0x01    /* target mode [1 = target, 0 = initiator */
#define sym_scntl0_aap  0x02    /* assert SATN on parity */
#define sym_scntl0_epc  0x08    /* enable parity checking */
#define sym_scntl0_watn 0x10    /* select with SATN on a start sequence */
#define sym_scntl0_start 0x20   /* start sequence */
#define sym_scntl0_arb0 0x40    /* arbitration mode bit 0 */
#define sym_scntl0_arb1 0x80    /* arbitration mode bit 1 */


/* 0x01 - scntl1 (scsi control 1) bit definitions */

#define sym_scntl1_sst  0x01    /* start scsi transfer */
#define sym_scntl1_iarb 0x02    /* immediate arbitration */
#define sym_scntl1_aesp 0x04    /* assert even scsi parity (force bad parity) */
#define sym_scntl1_rst  0x08    /* assert scsi RST signal */
#define sym_scntl1_con  0x10    /* connected */
#define sym_scntl1_dhp  0x20    /* disable halt on parity error or ATN */
#define sym_scntl1_adb  0x40    /* assert scsi data bus */
#define sym_scntl1_exc  0x80    /* extra clock cycle of data setup */


/* 0x02 - scntl2 (scsi control 2) bit definitions */

#define sym_scntl2_sdu  0x80    /* scsi disconnect unexpected */


/* 0x03 - scntl3 (scsi control 3) bit definitions */

#define sym_scntl3_ccf  0x07    /* clock conversion factor [mask] */
#define sym_scntl3_scf  0x70    /* synchronous clock conversion factor [mask] */


/* 0x04 - scid (scsi chip id) bit definitions */

#define sym_scid_enc    0x07    /* encoded scsi id [mask] */
#define sym_scid_sre    0x20    /* enable responce to selection */
#define sym_scid_rre    0x40    /* enable responce to reselection */


/* 0x05 - sxfer (scsi transfer) bit definitions */

#define sym_sxfer_mo    0x0f    /* max scsi synchronous offset [mask] */
#define sym_sxfer_tp    0xe0    /* scsi synchronous transfer period [mask] */


/* 0x06 - sdid (scsi destination id) bit definitions */

#define sym_sdid_enc    0x07    /* encoded destination scsi id [mask] */


/* 0x07 - gpreg (general purpose) bit definitions */

#define sym_gpreg_gpio0 0x01    /* general purpose */
#define sym_gpreg_gpio1 0x02    /* general purpose */


/* 0x09 - socl (scsi output control latch) bit definitions */

#define sym_socl_io             0x01    /* assert i/o signal */
#define sym_socl_cd             0x02    /* assert c/d signal */
#define sym_socl_msg    0x04    /* assert msg signal */
#define sym_socl_atn    0x08    /* assert atn signal */
#define sym_socl_sel    0x10    /* assert sel signal */
#define sym_socl_bsy    0x20    /* assert bsy signal */
#define sym_socl_ack    0x40    /* assert ack signal */
#define sym_socl_req    0x80    /* assert req signal */


/* 0x0a - ssid (scsi selector id) bit definitions */

#define sym_ssid_encid  0x07    /* encoded destination scsi id [mask] */
#define sym_ssid_val    0x80    /* scsi valid bit */


/* 0x0b - sbcl (scsi bus control lines) bit definitions */

#define sym_sbcl_io             0x01    /* i/o status */
#define sym_sbcl_cd             0x02    /* c/d status */
#define sym_sbcl_msg    0x04    /* msg status */
#define sym_sbcl_atn    0x08    /* atn status */
#define sym_sbcl_sel    0x10    /* sel status */
#define sym_sbcl_bsy    0x20    /* bsy status */
#define sym_sbcl_ack    0x40    /* ack status */
#define sym_sbcl_req    0x80    /* req status */


/* 0x0c - dstat (dma status) bit definitions */

#define sym_dstat_iid   0x01    /* illegal instruction detected */
#define sym_dstat_sir   0x04    /* scripts interrupt instruction received */
#define sym_dstat_ssi   0x08    /* single step interrupt */
#define sym_dstat_abrt  0x10    /* aborted */
#define sym_dstat_bf    0x20    /* bus fault */
#define sym_dstat_mdpe  0x40    /* master data parity error */
#define sym_dstat_dfe   0x80    /* dma fifo empty */


/* 0x0d - sstat0 (scsi status 0) bit definitions */

#define sym_sstat0_sdp  0x01    /* scsi parity signal */
#define sym_sstat0_rst  0x02    /* scsi reset signal */
#define sym_sstat0_woa  0x04    /* won arbitration */
#define sym_sstat0_loa  0x08    /* lost arbitration */
#define sym_sstat0_aip  0x10    /* arbitration in progress */
#define sym_sstat0_olf  0x20    /* scsi output data latch full */
#define sym_sstat0_orf  0x40    /* scsi output data register full */
#define sym_sstat0_ilf  0x80    /* scsi input data latch full */


/* 0x0e - sstat1 (scsi status 1) bit definitions */

#define sym_sstat1_io   0x01    /* scsi i/o signal */
#define sym_sstat1_cd   0x02    /* scsi c/d signal */
#define sym_sstat1_msg  0x04    /* scsi msg signal */
#define sym_sstat1_sdpl 0x08    /* latched scsi parity */
#define sym_sstat1_fifo 0xf0    /* mask for fifo flags [mask] */


/* 0x0f - sstat2 (scsi status 2) bit definitions */

#define sym_sstat2_ldsc 0x02    /* last disconnect */


/* 0x14 - istat (interrupt status) bit definitions */

#define sym_istat_dip   0x01    /* dma interrupt pending */
#define sym_istat_sip   0x02    /* scsi interrupt pending */
#define sym_istat_intf  0x04    /* interrupt on the fly */
#define sym_istat_con   0x08    /* connected */
#define sym_istat_sem   0x10    /* semaphore */
#define sym_istat_sigp  0x20    /* signal process */
#define sym_istat_srst  0x40    /* software reset */
#define sym_istat_abrt  0x80    /* abort operation */


/* 0x19 - ctest1 (chip test 1) bit definitions */

#define sym_ctest1_ffl  0x0f    /* byte empty in dma fifo [mask] */
#define sym_ctest1_fmt  0xf0    /* byte full in dma fifo [mask] */


/* 0x1a - ctest2 (chip test 2) bit definitions */

#define sym_ctest2_dack 0x01    /* data acknowledge status */
#define sym_ctest2_dreq 0x02    /* data request status */
#define sym_ctest2_teop 0x04    /* scsi true end of process */
#define sym_ctest2_cm   0x10    /* configured as memory */
#define sym_ctest2_cio  0x20    /* configured as i/o */
#define sym_ctest2_sigp 0x40    /* signal process */
#define sym_ctest2_ddir 0x80    /* data transfer direction */


/* 0x1b - ctest3 (chip test 3) bit definitions */

#define sym_ctest3_fm   0x02    /* fetch pin mode */
#define sym_ctest3_clf  0x04    /* clear dma fifo */
#define sym_ctest3_flf  0x08    /* flush dma fifo */
#define sym_ctest3_v    0xf0    /* chip revision level [mask] */


/* 0x20 - dfifo (dma fifo) bit definitions */

#define sym_dfifo_bo    0x7f    /* byte offset counter */


/* 0x21 - ctest4 (chip test 4) bit definitions */

#define sym_ctest4_fbl  0x07    /* fifo byte control [mask] */
#define sym_ctest4_mpee 0x08    /* master parity error enable */
#define sym_ctest4_srtm 0x10    /* shadow register test mode */
#define sym_ctest4_zsd  0x20    /* scsi data high impedance */
#define sym_ctest4_zmod 0x40    /* high impedance mode */
#define sym_ctest4_bdis 0x80    /* burst disable */

/* 0x22 - ctest5 (chip test 5) bit definitions */

#define sym_ctest5_ddir 0x08    /* dma direction */
#define sym_ctest5_masr 0x10    /* master control for set or reset pulses */
#define sym_ctest5_bbck 0x40    /* clock byte counter */
#define sym_ctest5_adck 0x80    /* clock address incrementor */


/* 0x38 - dmode (dma mode) bit definitions */

#define sym_dmode_man   0x01    /* manual start mode */
#define sym_dmode_erl   0x08    /* enable read line */
#define sym_dmode_diom  0x10    /* destination i/o memory enable */
#define sym_dmode_siom  0x20    /* source i/o memory enable */
#define sym_dmode_bl    0xc0    /* burst length */


/* 0x39 - dien (dma interrupt enable) bit definitions */

#define sym_dien_iid    0x01    /* illegal instruction detected */
#define sym_dien_sir    0x04    /* scripts interrupt instruction received */
#define sym_dien_ssi    0x08    /* single step instruction */
#define sym_dien_abrt   0x10    /* aborted */
#define sym_dien_bf             0x20    /* bus fault */
#define sym_dien_mdpe   0x40    /* master data parity error */


/* 0x3b - dcntl (dma control) bit definitions */

#define sym_dcntl_com   0x01    /* 53c700 compatibility */
#define sym_dcntl_std   0x04    /* start dma operation */
#define sym_dcntl_irqm  0x08    /* irq mode */
#define sym_dcntl_ssm   0x10    /* single step mode */


/* 0x40 - sien0 (scsi interrupt enable 0) bit definitions */

#define sym_sien0_par   0x01    /* scsi parity error */
#define sym_sien0_rst   0x02    /* scsi reset condition */
#define sym_sien0_udc   0x04    /* unexpected disconnect */
#define sym_sien0_sge   0x08    /* scsi gross error */
#define sym_sien0_rsl   0x10    /* reselected */
#define sym_sien0_sel   0x20    /* selected */
#define sym_sien0_cmp   0x40    /* function complete */
#define sym_sien0_ma    0x80    /* scsi phase mismatch or scsi atn condition */


/* 0x41 - sien1 (scsi interrupt enable 1) bit definitions */

#define sym_sien1_hth   0x01    /* handshake to handshake timer expired */
#define sym_sien1_gen   0x02    /* general purpose timer expired */
#define sym_sien1_sto   0x04    /* selection or reselection timeout */
#define sym_sien1_sbmc  0x10    /* SCSI Bus Mode Change */

/* 0x42 - sist0 (scsi interrupt status 0) bit definitions */

#define sym_sist0_par   0x01    /* parity error */
#define sym_sist0_rst   0x02    /* scsi rst/received */
#define sym_sist0_udc   0x04    /* unexpected disconnect */
#define sym_sist0_sge   0x08    /* scsi gross error */
#define sym_sist0_rsl   0x10    /* reselected */
#define sym_sist0_sel   0x20    /* selected */
#define sym_sist0_cmp   0x40    /* function complete */
#define sym_sist0_ma    0x80    /* scsi phase mismatch or scsi atn condition */


/* 0x43 - sist1 (scsi interrupt status 1) bit definitions */

#define sym_sist1_hth   0x01    /* handshake to handshake timer expired */
#define sym_sist1_gen   0x02    /* general purpose timer expired */
#define sym_sist1_sto   0x04    /* selection or reselection timeout */
#define sym_sist1_sbmc  0x10    /* SCSI Bus Mode Change */

/* 0x46 - macntl (memory access control) bit definitions */

#define sym_macntl_scpts 0x01   /* scripts */
#define sym_macntl_pscpt 0x02   /* pointer scripts */
#define sym_macntl_drd  0x04    /* data read */
#define sym_macntl_dwr  0x08    /* data write */
#define sym_macntl_typ  0xf0    /* chip type [mask] */


/* 0x47 - gpcntl (general purpose pin control) bit definitions */

#define sym_gpcntl_gpio0 0x01   /* gpio 0 */
#define sym_gpcntl_gpio1 0x02   /* gpio 1 */
#define sym_gpcntl_fe   0x40    /* fetch enable */
#define sym_gpcntl_me   0x80    /* master enable */


/* 0x48 - stime0 (scsi timer 0) bit definitions */

#define sym_stime0_sel  0x07    /* selection time-out [mask] */
#define sym_stime0_hth  0xf8    /* handshake to handshake timer period [mask] */


/* 0x49 - stime1 (scsi timer 1) bit definitions */

#define sym_stime1_gen  0x0f    /* general purpose timer period [mask] */


/* 0x4c - stest0 (scsi test 0) bit definitions */

#define sym_stest0_som  0x01    /* scsi synchronous offset maximum */
#define sym_stest0_soz  0x02    /* scsi synchronous offset zero */
#define sym_stest0_art  0x04    /* arbitration priority encoder test */
#define sym_stest0_slt  0x08    /* selection response logic test */


/* 0x4d - stest1 (scsi test 1) bit definitions */

#define sym_stest1_sclk 0x80    /* sclk */


/* 0x4e - stest2 (scsi test 2) bit definitions */

#define sym_stest2_low  0x01    /* scsi low level mode */
#define sym_stest2_ext  0x02    /* extend sreq/sack filtering */
#define sym_stest2_szm  0x08    /* scsi high-impedance mode */
#define sym_stest2_slb  0x10    /* scsi loopback mode */
#define sym_stest2_rof  0x40    /* reset scsi offset */
#define sym_stest2_sce  0x80    /* scsi control enable */


/* 0x4f - stest3 (scsi test 3) bit definitions */

#define sym_stest3_stw  0x01    /* scsi fifo test write */
#define sym_stest3_csf  0x02    /* clear scsi fifo */
#define sym_stest3_ttm  0x04    /* timer test mode */
#define sym_stest3_dsi  0x10    /* disable single initiator response */
#define sym_stest3_hsc  0x20    /* halt scsi clock */
#define sym_stest3_str  0x40    /* scsi fifo test read */
#define sym_stest3_te   0x80    /* tolerant enable */

#define sym_stest4_hvd  0x40    /* high voltage diff */
#define sym_stest4_se   0x80    /* single ended */
#define sym_stest4_lvd  0xc0    /* low voltage diff */
#define sym_stest4_lock 0x20    /* clock quadrupler locker */

#endif