usr/src/uts/sun/io/scsi/adapters/fas.c
1014
if (fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1016
struct f_slots *active = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
1019
fas->f_active[slot] = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
1023
mutex_destroy(&fas->f_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
1024
mutex_destroy(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
1025
cv_destroy(&fas->f_cv);
usr/src/uts/sun/io/scsi/adapters/fas.c
1028
ddi_remove_intr(dip, (uint_t)0, fas->f_iblock);
usr/src/uts/sun/io/scsi/adapters/fas.c
1033
if (fas->f_intr_kstat) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1034
kstat_delete(fas->f_intr_kstat);
usr/src/uts/sun/io/scsi/adapters/fas.c
1042
if (fas->f_kmem_cache) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1043
kmem_cache_destroy(fas->f_kmem_cache);
usr/src/uts/sun/io/scsi/adapters/fas.c
1045
if (fas->f_cmdarea) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1047
(void) ddi_dma_unbind_handle(fas->f_dmahandle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1049
ddi_dma_mem_free(&fas->f_cmdarea_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1051
if (fas->f_dmahandle) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1052
ddi_dma_free_handle(&fas->f_dmahandle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1054
fas_destroy_callbacks(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1055
if (fas->f_regs_acc_handle) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1056
ddi_regs_map_free(&fas->f_regs_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1058
if (fas->f_dmar_acc_handle) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1059
ddi_regs_map_free(&fas->f_dmar_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
107
static struct fas *fas_head; /* link all softstate structures */
usr/src/uts/sun/io/scsi/adapters/fas.c
1072
struct fas *fas, *nfas;
usr/src/uts/sun/io/scsi/adapters/fas.c
108
static struct fas *fas_tail; /* for fas_watch() */
usr/src/uts/sun/io/scsi/adapters/fas.c
1086
fas = TRAN2FAS(tran);
usr/src/uts/sun/io/scsi/adapters/fas.c
1087
if (!fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1091
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1093
fas->f_suspended = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
1095
if (fas->f_ncmds) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1096
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1097
(void) fas_dopoll(fas, SHORT_POLL_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
1102
fas->f_dma_csr &= ~DMA_INTEN;
usr/src/uts/sun/io/scsi/adapters/fas.c
1103
fas->f_dma_csr &= ~DMA_ENDVMA;
usr/src/uts/sun/io/scsi/adapters/fas.c
1104
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, fas->f_dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
1106
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1108
if (fas->f_quiesce_timeid) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1109
(void) untimeout(fas->f_quiesce_timeid);
usr/src/uts/sun/io/scsi/adapters/fas.c
1110
fas->f_quiesce_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1113
if (fas->f_restart_cmd_timeid) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1114
(void) untimeout(fas->f_restart_cmd_timeid);
usr/src/uts/sun/io/scsi/adapters/fas.c
1115
fas->f_restart_cmd_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
115
_NOTE(SCHEME_PROTECTS_DATA("safe sharing", fas::f_quiesce_timeid))
usr/src/uts/sun/io/scsi/adapters/fas.c
1161
struct fas *fas, *f;
usr/src/uts/sun/io/scsi/adapters/fas.c
1169
fas = TRAN2FAS(tran);
usr/src/uts/sun/io/scsi/adapters/fas.c
1170
if (!fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1177
fas->f_dma_csr &= ~DMA_INTEN;
usr/src/uts/sun/io/scsi/adapters/fas.c
1178
fas->f_dma->dma_csr = fas->f_dma_csr;
usr/src/uts/sun/io/scsi/adapters/fas.c
1179
ddi_remove_intr(dip, (uint_t)0, fas->f_iblock);
usr/src/uts/sun/io/scsi/adapters/fas.c
1186
if (fas_head == fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1187
f = fas_head = fas->f_next;
usr/src/uts/sun/io/scsi/adapters/fas.c
1189
for (f = fas_head; f != (struct fas *)NULL; f = f->f_next) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1190
if (f->f_next == fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1191
f->f_next = fas->f_next;
usr/src/uts/sun/io/scsi/adapters/fas.c
1202
if (f == (struct fas *)NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1212
if (fas_tail == fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1217
if (fas->f_intr_kstat)
usr/src/uts/sun/io/scsi/adapters/fas.c
1218
kstat_delete(fas->f_intr_kstat);
usr/src/uts/sun/io/scsi/adapters/fas.c
1220
fas_destroy_callbacks(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1222
scsi_hba_reset_notify_tear_down(fas->f_reset_notify_listf);
usr/src/uts/sun/io/scsi/adapters/fas.c
1229
struct f_slots *active = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
1245
fas->f_active[slot] = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
1247
ASSERT(fas->f_tcmds[slot] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1253
fas->f_flags |= FAS_FLG_NOTIMEOUTS;
usr/src/uts/sun/io/scsi/adapters/fas.c
1256
if (fas->f_quiesce_timeid) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1257
(void) untimeout(fas->f_quiesce_timeid);
usr/src/uts/sun/io/scsi/adapters/fas.c
1264
if (fas_head == (struct fas *)NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1283
if (fas->f_restart_cmd_timeid) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1284
(void) untimeout(fas->f_restart_cmd_timeid);
usr/src/uts/sun/io/scsi/adapters/fas.c
1285
fas->f_restart_cmd_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1294
if (fas->f_arq_pkt[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1299
(void) fas_delete_arq_pkt(fas, &sa);
usr/src/uts/sun/io/scsi/adapters/fas.c
1307
mutex_destroy(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
1308
mutex_destroy(&fas->f_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
1309
cv_destroy(&fas->f_cv);
usr/src/uts/sun/io/scsi/adapters/fas.c
1315
if (fas->f_kmem_cache) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1316
kmem_cache_destroy(fas->f_kmem_cache);
usr/src/uts/sun/io/scsi/adapters/fas.c
1319
if (fas->f_cmdarea != (uchar_t *)NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1320
(void) ddi_dma_unbind_handle(fas->f_dmahandle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1321
ddi_dma_mem_free(&fas->f_cmdarea_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1324
if (fas->f_dmahandle != (ddi_dma_handle_t)NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1325
ddi_dma_free_handle(&fas->f_dmahandle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1328
if (fas->f_regs_acc_handle) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1329
ddi_regs_map_free(&fas->f_regs_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1331
if (fas->f_dmar_acc_handle) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1332
ddi_regs_map_free(&fas->f_dmar_acc_handle);
usr/src/uts/sun/io/scsi/adapters/fas.c
1358
fas_quiesce_bus(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1360
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1363
fas->f_ncmds, fas->f_ndisc, fas->f_softstate);
usr/src/uts/sun/io/scsi/adapters/fas.c
1364
fas_set_throttles(fas, 0, N_SLOTS, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1365
if (fas_check_outstanding(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1366
fas->f_softstate |= FAS_SS_DRAINING;
usr/src/uts/sun/io/scsi/adapters/fas.c
1367
fas->f_quiesce_timeid = timeout(fas_ncmds_checkdrain,
usr/src/uts/sun/io/scsi/adapters/fas.c
1368
fas, (FAS_QUIESCE_TIMEOUT * drv_usectohz(1000000)));
usr/src/uts/sun/io/scsi/adapters/fas.c
1369
if (cv_wait_sig(FAS_CV(fas), FAS_MUTEX(fas)) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1374
fas->f_softstate &= ~FAS_SS_DRAINING;
usr/src/uts/sun/io/scsi/adapters/fas.c
1375
fas_set_throttles(fas, 0, N_SLOTS, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1376
(void) fas_istart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1377
if (fas->f_quiesce_timeid != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1378
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1380
(void) untimeout(fas->f_quiesce_timeid);
usr/src/uts/sun/io/scsi/adapters/fas.c
1381
fas->f_quiesce_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1385
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1389
ASSERT(fas->f_quiesce_timeid == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1390
fas->f_softstate &= ~FAS_SS_DRAINING;
usr/src/uts/sun/io/scsi/adapters/fas.c
1391
fas->f_softstate |= FAS_SS_QUIESCED;
usr/src/uts/sun/io/scsi/adapters/fas.c
1392
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1397
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1402
fas_unquiesce_bus(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1404
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1405
fas->f_softstate &= ~FAS_SS_QUIESCED;
usr/src/uts/sun/io/scsi/adapters/fas.c
1406
fas_set_throttles(fas, 0, N_SLOTS, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1407
(void) fas_istart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1409
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
141
static void fas_test_abort(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
1420
struct fas *fas = arg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1422
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1424
fas->f_ncmds, fas->f_ndisc, fas->f_softstate);
usr/src/uts/sun/io/scsi/adapters/fas.c
1425
if (fas->f_softstate & FAS_SS_DRAINING) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1426
fas->f_quiesce_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1427
if (fas_check_outstanding(fas) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1429
cv_signal(FAS_CV(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1436
fas_set_throttles(fas, 0, N_SLOTS, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1438
fas->f_quiesce_timeid = timeout(fas_ncmds_checkdrain,
usr/src/uts/sun/io/scsi/adapters/fas.c
1439
fas, (FAS_QUIESCE_TIMEOUT * drv_usectohz(1000000)));
usr/src/uts/sun/io/scsi/adapters/fas.c
144
static void fas_test_reset(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
1442
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1446
fas_check_outstanding(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1449
uint_t d = ((fas->f_dslot == 0)? 1 : fas->f_dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
1452
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
1455
ncmds += fas->f_tcmds[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
1466
fas_reg_tracing(struct fas *fas, int type, int regno, uint32_t what)
usr/src/uts/sun/io/scsi/adapters/fas.c
1468
fas->f_reg_trace[fas->f_reg_trace_index++] = type;
usr/src/uts/sun/io/scsi/adapters/fas.c
1469
fas->f_reg_trace[fas->f_reg_trace_index++] = regno;
usr/src/uts/sun/io/scsi/adapters/fas.c
1470
fas->f_reg_trace[fas->f_reg_trace_index++] = what;
usr/src/uts/sun/io/scsi/adapters/fas.c
1471
fas->f_reg_trace[fas->f_reg_trace_index++] = gethrtime();
usr/src/uts/sun/io/scsi/adapters/fas.c
1472
fas->f_reg_trace[fas->f_reg_trace_index] = 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
1473
if (fas->f_reg_trace_index >= REG_TRACE_BUF_SIZE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1474
fas->f_reg_trace_index = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1479
fas_reg_cmd_write(struct fas *fas, uint8_t cmd)
usr/src/uts/sun/io/scsi/adapters/fas.c
1481
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1485
fas->f_last_cmd = cmd;
usr/src/uts/sun/io/scsi/adapters/fas.c
1488
fas_reg_tracing(fas, 0, regno, cmd);
usr/src/uts/sun/io/scsi/adapters/fas.c
1490
fas->f_reg_cmds++;
usr/src/uts/sun/io/scsi/adapters/fas.c
1494
fas_reg_write(struct fas *fas, volatile uint8_t *p, uint8_t what)
usr/src/uts/sun/io/scsi/adapters/fas.c
1496
int regno = (uintptr_t)p - (uintptr_t)fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1501
fas_reg_tracing(fas, 1, regno, what);
usr/src/uts/sun/io/scsi/adapters/fas.c
1503
fas->f_reg_writes++;
usr/src/uts/sun/io/scsi/adapters/fas.c
1507
fas_reg_read(struct fas *fas, volatile uint8_t *p)
usr/src/uts/sun/io/scsi/adapters/fas.c
1510
int regno = (uintptr_t)p - (uintptr_t)fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1515
fas_reg_tracing(fas, 2, regno, what);
usr/src/uts/sun/io/scsi/adapters/fas.c
1517
fas->f_reg_reads++;
usr/src/uts/sun/io/scsi/adapters/fas.c
1526
fas_dma_reg_write(struct fas *fas, volatile uint32_t *p, uint32_t what)
usr/src/uts/sun/io/scsi/adapters/fas.c
1529
fas->f_reg_dma_writes++;
usr/src/uts/sun/io/scsi/adapters/fas.c
1533
int regno = (uintptr_t)p - (uintptr_t)fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
1535
fas_reg_tracing(fas, 3, regno, what);
usr/src/uts/sun/io/scsi/adapters/fas.c
1541
fas_dma_reg_read(struct fas *fas, volatile uint32_t *p)
usr/src/uts/sun/io/scsi/adapters/fas.c
1544
fas->f_reg_dma_reads++;
usr/src/uts/sun/io/scsi/adapters/fas.c
1548
int regno = (uintptr_t)p - (uintptr_t)fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
1550
fas_reg_tracing(fas, 4, regno, what);
usr/src/uts/sun/io/scsi/adapters/fas.c
1557
#define FIFO_EMPTY(fas) (fas_reg_read(fas, &fas->f_reg->fas_stat2) & \
usr/src/uts/sun/io/scsi/adapters/fas.c
1559
#define FIFO_CNT(fas) \
usr/src/uts/sun/io/scsi/adapters/fas.c
1560
(fas_reg_read(fas, &fas->f_reg->fas_fifo_flag) & FIFO_CNT_MASK)
usr/src/uts/sun/io/scsi/adapters/fas.c
1564
fas_assert_atn(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1566
fas_reg_cmd_write(fas, CMD_SET_ATN);
usr/src/uts/sun/io/scsi/adapters/fas.c
1573
#define fas_assert_atn(fas) fas_reg_cmd_write(fas, CMD_SET_ATN)
usr/src/uts/sun/io/scsi/adapters/fas.c
1580
#define FAS_DMA_WRITE(fas, count, base, cmd) { \
usr/src/uts/sun/io/scsi/adapters/fas.c
1581
volatile struct fasreg *fasreg = fas->f_reg; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1582
volatile struct dma *dmar = fas->f_dma; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1583
ASSERT((fas_dma_reg_read(fas, &dmar->dma_csr) & DMA_ENDVMA) == 0); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1585
fas_reg_cmd_write(fas, cmd); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1586
fas_dma_reg_write(fas, &dmar->dma_count, count); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1587
fas->f_dma_csr |= \
usr/src/uts/sun/io/scsi/adapters/fas.c
1589
fas_dma_reg_write(fas, &dmar->dma_addr, (fas->f_lastdma = base)); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1590
fas_dma_reg_write(fas, &dmar->dma_csr, fas->f_dma_csr); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1593
#define FAS_DMA_WRITE_SETUP(fas, count, base) { \
usr/src/uts/sun/io/scsi/adapters/fas.c
1594
volatile struct fasreg *fasreg = fas->f_reg; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1595
volatile struct dma *dmar = fas->f_dma; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1596
ASSERT((fas_dma_reg_read(fas, &dmar->dma_csr) & DMA_ENDVMA) == 0); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1598
fas_dma_reg_write(fas, &dmar->dma_count, count); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1599
fas->f_dma_csr |= \
usr/src/uts/sun/io/scsi/adapters/fas.c
1601
fas_dma_reg_write(fas, &dmar->dma_addr, (fas->f_lastdma = base)); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1605
#define FAS_DMA_READ(fas, count, base, dmacount, cmd) { \
usr/src/uts/sun/io/scsi/adapters/fas.c
1606
volatile struct fasreg *fasreg = fas->f_reg; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1607
volatile struct dma *dmar = fas->f_dma; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1608
ASSERT((fas_dma_reg_read(fas, &dmar->dma_csr) & DMA_ENDVMA) == 0); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1610
fas_reg_cmd_write(fas, cmd); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1611
fas->f_dma_csr |= \
usr/src/uts/sun/io/scsi/adapters/fas.c
1612
(fas->f_dma_csr & ~DMA_WRITE) | DMA_ENDVMA | DMA_DSBL_DRAIN; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1613
fas_dma_reg_write(fas, &dmar->dma_count, dmacount); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1614
fas_dma_reg_write(fas, &dmar->dma_addr, (fas->f_lastdma = base)); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1615
fas_dma_reg_write(fas, &dmar->dma_csr, fas->f_dma_csr); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1619
FAS_FLUSH_DMA(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1621
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, DMA_RESET);
usr/src/uts/sun/io/scsi/adapters/fas.c
1622
fas->f_dma_csr |= (DMA_INTEN|DMA_TWO_CYCLE|DMA_DSBL_PARITY|
usr/src/uts/sun/io/scsi/adapters/fas.c
1624
fas->f_dma_csr &= ~(DMA_ENDVMA | DMA_WRITE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1625
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1626
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, fas->f_dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
1627
fas_dma_reg_write(fas, &fas->f_dma->dma_addr, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1634
FAS_FLUSH_DMA_HARD(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1636
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, DMA_RESET);
usr/src/uts/sun/io/scsi/adapters/fas.c
1637
fas->f_dma_csr |= (DMA_INTEN|DMA_TWO_CYCLE|DMA_DSBL_PARITY|
usr/src/uts/sun/io/scsi/adapters/fas.c
1639
fas->f_dma_csr &= ~(DMA_ENDVMA | DMA_WRITE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1640
while (fas_dma_reg_read(fas, &fas->f_dma->dma_csr) & DMA_REQPEND)
usr/src/uts/sun/io/scsi/adapters/fas.c
1642
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1643
fas_dma_reg_write(fas, &fas->f_dma->dma_csr, fas->f_dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
1644
fas_dma_reg_write(fas, &fas->f_dma->dma_addr, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1650
#define FAS_SET_PERIOD_OFFSET_CONF3_REGS(fas, target) \
usr/src/uts/sun/io/scsi/adapters/fas.c
1653
period = fas->f_sync_period[target] & SYNC_PERIOD_MASK; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1654
offset = fas->f_offset[target]; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1655
conf3 = fas->f_fasconf3[target]; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1656
if ((period != fas->f_period_reg_last) || \
usr/src/uts/sun/io/scsi/adapters/fas.c
1657
(offset != fas->f_offset_reg_last) || \
usr/src/uts/sun/io/scsi/adapters/fas.c
1658
(conf3 != fas->f_fasconf3_reg_last)) { \
usr/src/uts/sun/io/scsi/adapters/fas.c
1659
fas->f_period_reg_last = period; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1660
fas->f_offset_reg_last = offset; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1661
fas->f_fasconf3_reg_last = conf3; \
usr/src/uts/sun/io/scsi/adapters/fas.c
1662
fas_reg_write(fas, &fasreg->fas_sync_period, period); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1663
fas_reg_write(fas, &fasreg->fas_sync_offset, offset); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1664
fas_reg_write(fas, &fasreg->fas_conf3, conf3); \
usr/src/uts/sun/io/scsi/adapters/fas.c
1674
fas_read_fifo(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1676
int stat = fas->f_stat;
usr/src/uts/sun/io/scsi/adapters/fas.c
1677
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1680
i = fas_reg_read(fas, &fasreg->fas_fifo_flag) & FIFO_CNT_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
1684
fas->f_fifolen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1686
fas->f_fifo[fas->f_fifolen++] = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
1688
fas->f_fifo[fas->f_fifolen++] = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
1691
if (fas->f_stat2 & FAS_STAT2_ISHUTTLE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1694
fas_reg_write(fas, &fasreg->fas_fifo_data, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1695
fas->f_fifo[fas->f_fifolen++] = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
1698
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
1701
fas->f_fifolen, stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
1705
fas_write_fifo(struct fas *fas, uchar_t *buf, int length, int pad)
usr/src/uts/sun/io/scsi/adapters/fas.c
1708
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1712
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
1714
fas_reg_write(fas, &fasreg->fas_fifo_data, buf[i]);
usr/src/uts/sun/io/scsi/adapters/fas.c
1716
fas_reg_write(fas, &fasreg->fas_fifo_data, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
1725
fas_init_chip(struct fas *fas, uchar_t initiator_id)
usr/src/uts/sun/io/scsi/adapters/fas.c
1737
fas->f_dev, DDI_PROP_DONTPASS, prop_cfreq, -1);
usr/src/uts/sun/io/scsi/adapters/fas.c
1740
fas_log(fas, CE_WARN, "Bad clock frequency");
usr/src/uts/sun/io/scsi/adapters/fas.c
1744
fas->f_clock_conv = clock_conv;
usr/src/uts/sun/io/scsi/adapters/fas.c
1745
fas->f_clock_cycle = CLOCK_PERIOD(i);
usr/src/uts/sun/io/scsi/adapters/fas.c
1746
ticks = FAS_CLOCK_TICK(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1747
fas->f_stval = FAS_CLOCK_TIMEOUT(ticks, fas_selection_timeout);
usr/src/uts/sun/io/scsi/adapters/fas.c
1750
i, fas->f_clock_conv, fas->f_clock_cycle,
usr/src/uts/sun/io/scsi/adapters/fas.c
1751
ticks, fas->f_stval);
usr/src/uts/sun/io/scsi/adapters/fas.c
1755
fas->f_fasconf |= FAS_CONF_PAREN;
usr/src/uts/sun/io/scsi/adapters/fas.c
1756
fas->f_fasconf2 = (uchar_t)(FAS_CONF2_FENABLE | FAS_CONF2_XL32);
usr/src/uts/sun/io/scsi/adapters/fas.c
1766
fas->f_fasconf3[i] = initial_conf3;
usr/src/uts/sun/io/scsi/adapters/fas.c
1774
fas_internal_reset(fas, FAS_RESET_SOFTC|FAS_RESET_FAS|FAS_RESET_DMA);
usr/src/uts/sun/io/scsi/adapters/fas.c
1780
if (fas->f_target_scsi_options[i] & SCSI_OPTIONS_SYNC) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1781
fas->f_offset[i] = fas_default_offset |
usr/src/uts/sun/io/scsi/adapters/fas.c
1782
fas->f_req_ack_delay;
usr/src/uts/sun/io/scsi/adapters/fas.c
1784
fas->f_offset[i] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1786
if (fas->f_target_scsi_options[i] & SCSI_OPTIONS_FAST) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1787
fas->f_neg_period[i] =
usr/src/uts/sun/io/scsi/adapters/fas.c
1788
(uchar_t)MIN_SYNC_PERIOD(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1790
fas->f_neg_period[i] =
usr/src/uts/sun/io/scsi/adapters/fas.c
1801
fas_internal_reset(struct fas *fas, int reset_action)
usr/src/uts/sun/io/scsi/adapters/fas.c
1803
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
1804
volatile struct dma *dmar = fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
1807
fas_reg_cmd_write(fas, CMD_RESET_SCSI);
usr/src/uts/sun/io/scsi/adapters/fas.c
1808
fas_setup_reset_delay(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1811
FAS_FLUSH_DMA_HARD(fas); /* resets and reinits the dma */
usr/src/uts/sun/io/scsi/adapters/fas.c
1819
int burstsizes = fas->f_dma_attr->dma_attr_burstsizes;
usr/src/uts/sun/io/scsi/adapters/fas.c
1822
fas->f_dma_csr |= DMA_BURST64;
usr/src/uts/sun/io/scsi/adapters/fas.c
1825
fas->f_dma_csr |= DMA_BURST32;
usr/src/uts/sun/io/scsi/adapters/fas.c
1829
if ((fas->f_hm_rev > 0x20) && (fas_enable_sbus64) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
1830
(ddi_dma_set_sbus64(fas->f_dmahandle, burstsizes) ==
usr/src/uts/sun/io/scsi/adapters/fas.c
1833
fas->f_dma_csr |= DMA_WIDE_EN;
usr/src/uts/sun/io/scsi/adapters/fas.c
1845
fas_reg_cmd_write(fas, CMD_RESET_FAS);
usr/src/uts/sun/io/scsi/adapters/fas.c
1846
fas_reg_cmd_write(fas, CMD_NOP | CMD_DMA);
usr/src/uts/sun/io/scsi/adapters/fas.c
1847
fas_reg_cmd_write(fas, CMD_NOP | CMD_DMA);
usr/src/uts/sun/io/scsi/adapters/fas.c
1853
fas_reg_write(fas, &fasreg->fas_clock_conv,
usr/src/uts/sun/io/scsi/adapters/fas.c
1854
(fas->f_clock_conv & CLOCK_MASK));
usr/src/uts/sun/io/scsi/adapters/fas.c
1856
fas_reg_write(fas, &fasreg->fas_timeout, fas->f_stval);
usr/src/uts/sun/io/scsi/adapters/fas.c
1861
fas->f_idcode = idcode =
usr/src/uts/sun/io/scsi/adapters/fas.c
1862
fas_reg_read(fas, &fasreg->fas_id_code);
usr/src/uts/sun/io/scsi/adapters/fas.c
1864
fas->f_type = FAS366;
usr/src/uts/sun/io/scsi/adapters/fas.c
1867
dmarev = fas_dma_reg_read(fas, &dmar->dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
1871
fas_reg_write(fas, &fasreg->fas_conf, fas->f_fasconf);
usr/src/uts/sun/io/scsi/adapters/fas.c
1872
fas_reg_write(fas, &fasreg->fas_conf2, fas->f_fasconf2);
usr/src/uts/sun/io/scsi/adapters/fas.c
1874
fas->f_req_ack_delay = DEFAULT_REQ_ACK_DELAY;
usr/src/uts/sun/io/scsi/adapters/fas.c
1879
(void) fas_reg_read(fas, &fasreg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
1883
fas->f_wdtr_sent = fas->f_sdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1884
fas->f_wide_known = fas->f_sync_known = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1885
fas->f_wide_enabled = fas->f_sync_enabled = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1886
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1887
fas->f_cur_msgout[0] = fas->f_last_msgout =
usr/src/uts/sun/io/scsi/adapters/fas.c
1888
fas->f_last_msgin = INVALID_MSG;
usr/src/uts/sun/io/scsi/adapters/fas.c
1889
fas->f_abort_msg_sent = fas->f_reset_msg_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1890
fas->f_next_slot = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1891
fas->f_current_sp = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
1892
fas->f_fifolen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
1893
fas->f_fasconf3_reg_last = fas->f_offset_reg_last =
usr/src/uts/sun/io/scsi/adapters/fas.c
1894
fas->f_period_reg_last = 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
1896
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
1907
fas_check_ncmds(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1914
if (fas->f_active[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1915
struct fas_cmd *sp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
1916
t = fas->f_active[slot]->f_n_slots;
usr/src/uts/sun/io/scsi/adapters/fas.c
1922
if (fas->f_active[slot]->f_slot[tag] != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1927
ASSERT(n == fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
1929
slot = NEXTSLOT(slot, fas->f_dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
1932
if (total != fas->f_ncmds) {
usr/src/uts/sun/io/scsi/adapters/fas.c
1934
total, fas->f_ncmds);
usr/src/uts/sun/io/scsi/adapters/fas.c
1936
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
1939
#define fas_check_ncmds(fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
1953
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
1958
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1960
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
1971
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
1977
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
1979
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
198
static int fas_prepare_pkt(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
199
static int fas_alloc_tag(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
1990
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
1993
&fas->f_mutex, &fas->f_reset_notify_listf));
usr/src/uts/sun/io/scsi/adapters/fas.c
200
static int fas_accept_pkt(struct fas *fas, struct fas_cmd *sp, int flag);
usr/src/uts/sun/io/scsi/adapters/fas.c
2003
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
201
static void fas_empty_waitQ(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2013
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
202
static void fas_move_waitQ_to_readyQ(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
203
static void fas_check_waitQ_and_mutex_exit(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
204
static int fas_istart(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
205
static int fas_ustart(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
206
static int fas_startcmd(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2070
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
208
static int fas_pkt_alloc_extern(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2090
cmd = kmem_cache_alloc(fas->f_kmem_cache, kf);
usr/src/uts/sun/io/scsi/adapters/fas.c
210
static void fas_pkt_destroy_extern(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2126
failure = fas_pkt_alloc_extern(fas, cmd,
usr/src/uts/sun/io/scsi/adapters/fas.c
214
static int fas_finish(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
215
static void fas_handle_qfull(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
217
static int fas_dopoll(struct fas *fas, int timeout);
usr/src/uts/sun/io/scsi/adapters/fas.c
218
static void fas_runpoll(struct fas *fas, short slot, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
220
static int fas_intr_svc(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
221
static int fas_phasemanage(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
222
static int fas_handle_unknown(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2225
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
223
static int fas_handle_cmd_start(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
224
static int fas_handle_cmd_done(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
225
static int fas_handle_msg_out_start(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2251
kmem_cache_free(fas->f_kmem_cache, (void *)sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2253
fas_pkt_destroy_extern(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
226
static int fas_handle_msg_out_done(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2267
fas_pkt_alloc_extern(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
227
static int fas_handle_clearing(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
228
static int fas_handle_data_start(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
229
static int fas_handle_data_done(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2299
fas_pkt_destroy_extern(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
230
static int fas_handle_c_cmplt(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2308
fas_pkt_destroy_extern(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
231
static int fas_handle_msg_in_start(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
232
static int fas_handle_more_msgin(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2328
kmem_cache_free(fas->f_kmem_cache, (void *)sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
233
static int fas_handle_msg_in_done(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
234
static int fas_onebyte_msg(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2340
struct fas *fas = cdrarg;
usr/src/uts/sun/io/scsi/adapters/fas.c
2349
if ((ddi_dma_alloc_handle(fas->f_dev, fas->f_dma_attr, callback,
usr/src/uts/sun/io/scsi/adapters/fas.c
235
static int fas_twobyte_msg(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
236
static int fas_multibyte_msg(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
237
static void fas_revert_to_async(struct fas *fas, int tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
2373
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
238
static int fas_finish_select(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
239
static int fas_reselect_preempt(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2397
rval = fas_prepare_pkt(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
240
static int fas_reconnect(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
241
static int fas_handle_selection(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
242
static void fas_head_of_readyQ(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2428
mutex_enter(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
243
static int fas_handle_gross_err(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2430
if ((fas->f_state != STATE_FREE) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
2431
fas->f_waitf || (intr = INTPENDING(fas))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
244
static int fas_illegal_cmd_or_bus_reset(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
245
static int fas_check_dma_error(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2450
if (mutex_tryenter(FAS_MUTEX(fas))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2451
mutex_exit(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
2452
rval = fas_accept_pkt(fas, sp, TRAN_BUSY_OK);
usr/src/uts/sun/io/scsi/adapters/fas.c
2465
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
2466
rval = fas_accept_pkt(fas, sp, TRAN_BUSY_OK);
usr/src/uts/sun/io/scsi/adapters/fas.c
247
static void fas_make_sdtr(struct fas *fas, int msgout_offset, int target);
usr/src/uts/sun/io/scsi/adapters/fas.c
2475
if (fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2476
FAS_CHECK_WAITQ_AND_FAS_MUTEX_EXIT(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2478
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
248
static void fas_make_wdtr(struct fas *fas, int msgout_offset, int target,
usr/src/uts/sun/io/scsi/adapters/fas.c
2483
"fas_scsi_start_end: fas 0x%p", fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2487
if (fas->f_waitf == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2488
fas->f_waitb = fas->f_waitf = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
2491
struct fas_cmd *dp = fas->f_waitb;
usr/src/uts/sun/io/scsi/adapters/fas.c
2492
dp->cmd_forw = fas->f_waitb = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
250
static void fas_update_props(struct fas *fas, int tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
2501
if ((intr == 0) && (fas->f_state == STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2502
mutex_tryenter(FAS_MUTEX(fas))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2507
if (fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2508
fas_empty_waitQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
251
static void fas_update_this_prop(struct fas *fas, char *property, int value);
usr/src/uts/sun/io/scsi/adapters/fas.c
2510
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
2512
mutex_exit(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
2515
"fas_scsi_start_end: fas 0x%p", fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2525
fas_prepare_pkt(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
2556
if (fas_set_new_window(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
257
static void fas_watchsubr(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
258
static void fas_cmd_timeout(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
259
static void fas_sync_wide_backoff(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2593
fas_log(fas, CE_NOTE,
usr/src/uts/sun/io/scsi/adapters/fas.c
2596
Tgt(sp), fas->f_tcmds[slot], (void *)sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2597
fas->f_throttle[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
261
static void fas_reset_sync_wide(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
262
static void fas_set_wide_conf3(struct fas *fas, int target, int width);
usr/src/uts/sun/io/scsi/adapters/fas.c
2626
if ((fas->f_target_scsi_options[Tgt(sp)] & SCSI_OPTIONS_DR) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
263
static void fas_force_renegotiation(struct fas *fas, int target);
usr/src/uts/sun/io/scsi/adapters/fas.c
265
static int fas_set_new_window(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2658
fas_empty_waitQ(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
266
static int fas_restore_pointers(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2664
ASSERT(mutex_owned(&fas->f_waitQ_mutex));
usr/src/uts/sun/io/scsi/adapters/fas.c
2668
while (fas->f_waitf) {
usr/src/uts/sun/io/scsi/adapters/fas.c
267
static int fas_next_window(struct fas *fas, struct fas_cmd *sp, uint64_t end);
usr/src/uts/sun/io/scsi/adapters/fas.c
2671
waitf = fas->f_waitf;
usr/src/uts/sun/io/scsi/adapters/fas.c
2672
waitb = fas->f_waitb;
usr/src/uts/sun/io/scsi/adapters/fas.c
2673
fas->f_waitf = fas->f_waitb = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
2674
mutex_exit(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
2683
rval = fas_accept_pkt(fas, sp, NO_TRAN_BUSY);
usr/src/uts/sun/io/scsi/adapters/fas.c
2691
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
2694
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2698
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
270
static void fas_log(struct fas *fas, int level, const char *fmt, ...);
usr/src/uts/sun/io/scsi/adapters/fas.c
2703
mutex_enter(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
2706
waitb->cmd_forw = fas->f_waitf;
usr/src/uts/sun/io/scsi/adapters/fas.c
2707
fas->f_waitf = waitf;
usr/src/uts/sun/io/scsi/adapters/fas.c
2708
if (fas->f_waitb == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2709
fas->f_waitb = waitb;
usr/src/uts/sun/io/scsi/adapters/fas.c
2716
mutex_enter(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
272
static void fas_printf(struct fas *fas, const char *fmt, ...);
usr/src/uts/sun/io/scsi/adapters/fas.c
2723
fas_move_waitQ_to_readyQ(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
2729
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
273
static void fas_printstate(struct fas *fas, char *msg);
usr/src/uts/sun/io/scsi/adapters/fas.c
2730
mutex_enter(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
2731
fas_empty_waitQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2732
mutex_exit(&fas->f_waitQ_mutex);
usr/src/uts/sun/io/scsi/adapters/fas.c
274
static void fas_dump_cmd(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2741
fas_check_waitQ_and_mutex_exit(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
2743
_NOTE(LOCK_RELEASED_AS_SIDE_EFFECT(fas->f_mutex))
usr/src/uts/sun/io/scsi/adapters/fas.c
2744
FAS_CHECK_WAITQ_AND_FAS_MUTEX_EXIT(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2745
FAS_EMPTY_CALLBACKQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
275
static void fas_short_dump_cmd(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2755
fas_accept_pkt(struct fas *fas, struct fas_cmd *sp, int flag)
usr/src/uts/sun/io/scsi/adapters/fas.c
2761
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
2762
ASSERT(fas->f_ncmds >= 0 && fas->f_ndisc >= 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
2763
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
2764
ASSERT(fas->f_tcmds[slot] >= 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
2771
rval = fas_prepare_pkt(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2781
fas->f_dslot = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
2783
if ((fas->f_active[slot] == NULL) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
2784
((fas->f_active[slot]->f_n_slots != NTAGS) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2786
(void) fas_alloc_active_slots(fas, slot, KM_NOSLEEP);
usr/src/uts/sun/io/scsi/adapters/fas.c
2788
if ((fas->f_active[slot] == NULL) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
2799
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
280
static int fas_do_proxy_cmd(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2800
fas->f_ncmds++;
usr/src/uts/sun/io/scsi/adapters/fas.c
2808
fas_runpoll(fas, slot, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2816
if ((fas->f_tcmds[slot] == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2817
(fas->f_throttle[slot] == DRAIN_THROTTLE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2819
ASSERT(fas->f_reset_delay[Tgt(sp)] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
2820
fas_full_throttle(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
2829
fas->f_total_cmds++;
usr/src/uts/sun/io/scsi/adapters/fas.c
283
static void fas_internal_reset(struct fas *fas, int reset_action);
usr/src/uts/sun/io/scsi/adapters/fas.c
2832
if ((fas->f_readyf[slot] == NULL) && (fas->f_state == STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2833
(fas->f_throttle[slot] > fas->f_tcmds[slot])) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2834
ASSERT(fas->f_current_sp == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
2835
(void) fas_startcmd(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
284
static int fas_alloc_active_slots(struct fas *fas, int slot, int flag);
usr/src/uts/sun/io/scsi/adapters/fas.c
2845
struct fas_cmd *ssp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
2849
fas_head_of_readyQ(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
2854
if (fas->f_readyb[slot] == ssp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2855
fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
2858
fas->f_readyf[slot] = fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
286
static int fas_abort_curcmd(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2868
(fas->f_tcmds[slot] >= fas->f_throttle[slot]) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2869
(fas->f_throttle[slot] > HOLD_THROTTLE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
287
static int fas_abort_cmd(struct fas *fas, struct fas_cmd *sp, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
2873
slot, fas->f_ncmds);
usr/src/uts/sun/io/scsi/adapters/fas.c
2875
fas->f_ncmds--;
usr/src/uts/sun/io/scsi/adapters/fas.c
2882
} else if (fas->f_readyf[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2883
struct fas_cmd *dp = fas->f_readyb[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
2885
fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
2889
fas->f_readyf[slot] = fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
290
static int fas_remove_from_readyQ(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2900
if (fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2901
(void) fas_istart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2905
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
2906
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
2918
fas_alloc_tag(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
292
static void fas_flush_readyQ(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
2925
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
2927
tag_slots = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
293
static void fas_flush_tagQ(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
2931
tag = (fas->f_active[slot]->f_tags)++;
usr/src/uts/sun/io/scsi/adapters/fas.c
2932
if (fas->f_active[slot]->f_tags >= NTAGS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2936
fas->f_active[slot]->f_tags = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
294
static void fas_flush_cmd(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2952
(fas->f_tcmds[slot])++;
usr/src/uts/sun/io/scsi/adapters/fas.c
2953
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
296
static int fas_abort_connected_cmd(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
2969
if (age >= fas->f_scsi_tag_age_limit &&
usr/src/uts/sun/io/scsi/adapters/fas.c
2973
if (fas->f_reset_delay[Tgt(sp)] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2974
fas->f_throttle[slot] = DRAIN_THROTTLE;
usr/src/uts/sun/io/scsi/adapters/fas.c
298
static int fas_abort_disconnected_cmd(struct fas *fas, struct scsi_address *ap,
usr/src/uts/sun/io/scsi/adapters/fas.c
2980
tag = fas->f_active[slot]->f_tags;
usr/src/uts/sun/io/scsi/adapters/fas.c
2985
if (++(fas->f_active[slot]->f_tags) >= NTAGS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
2989
fas->f_active[slot]->f_tags = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
300
static void fas_mark_packets(struct fas *fas, int slot, uchar_t reason,
usr/src/uts/sun/io/scsi/adapters/fas.c
3007
fas_head_of_readyQ(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
302
static void fas_set_pkt_reason(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
3020
fas_istart(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3026
if (fas->f_state == STATE_FREE && fas->f_ncmds > fas->f_ndisc) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3027
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3035
fas_ustart(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3038
short slot = fas->f_next_slot;
usr/src/uts/sun/io/scsi/adapters/fas.c
3040
short dslot = fas->f_dslot;
usr/src/uts/sun/io/scsi/adapters/fas.c
3043
EPRINTF1("fas_ustart: start_slot=%x\n", fas->f_next_slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
3044
ASSERT(fas->f_current_sp == NULL);
usr/src/uts/sun/io/scsi/adapters/fas.c
305
static int fas_reset_bus(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3059
if (fas->f_throttle[slot] == DRAIN_THROTTLE &&
usr/src/uts/sun/io/scsi/adapters/fas.c
306
static int fas_reset_recovery(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3060
fas->f_tcmds[slot] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3061
fas_full_throttle(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
3064
if (fas->f_readyf[slot] &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3065
(fas->f_throttle[slot] > fas->f_tcmds[slot])) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3066
sp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
3067
fas->f_readyf[slot] = sp->cmd_forw;
usr/src/uts/sun/io/scsi/adapters/fas.c
3069
fas->f_readyb[slot] = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
307
static int fas_reset_connected_cmd(struct fas *fas, struct scsi_address *ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
3071
fas->f_next_slot = NEXTSLOT(slot, dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
3075
return (fas_startcmd(fas, sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
308
static int fas_reset_disconnected_cmd(struct fas *fas, struct scsi_address *ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
3082
fas->f_next_slot = NEXTSLOT(slot, dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
309
static void fas_start_watch_reset_delay(struct fas *);
usr/src/uts/sun/io/scsi/adapters/fas.c
3092
fas_startcmd(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
3094
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
3098
volatile uchar_t *tp = fas->f_cmdarea;
usr/src/uts/sun/io/scsi/adapters/fas.c
310
static void fas_setup_reset_delay(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3101
struct f_slots *slots = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
3112
ASSERT(fas->f_current_sp == NULL && fas->f_state == STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
3114
ASSERT(fas->f_throttle[slot] > 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
3115
ASSERT(fas->f_reset_delay[Tgt(sp)] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
312
static int fas_watch_reset_delay_subr(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3127
TAGGED(target) && fas->f_tcmds[slot] &&
usr/src/uts/sun/io/scsi/adapters/fas.c
313
static void fas_reset_cleanup(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
3135
if (fas->f_reset_delay[Tgt(sp)] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3136
fas->f_throttle[slot] = DRAIN_THROTTLE;
usr/src/uts/sun/io/scsi/adapters/fas.c
3138
dp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
3139
fas->f_readyf[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3141
if (fas->f_readyb[slot] == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3142
fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3154
if (fas_alloc_tag(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3163
ASSERT(fas->f_active[slot]->f_slot[0] == NULL);
usr/src/uts/sun/io/scsi/adapters/fas.c
3164
fas->f_active[slot]->f_slot[0] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3167
ASSERT(fas->f_tcmds[slot] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
3173
fas->f_throttle[slot] = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
3175
(fas->f_tcmds[slot])++;
usr/src/uts/sun/io/scsi/adapters/fas.c
3180
fas->f_current_sp = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3181
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
3183
fas->f_sdtr_sent = fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
3187
fas_force_renegotiation(fas, Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
319
static void fas_set_throttles(struct fas *fas, int slot,
usr/src/uts/sun/io/scsi/adapters/fas.c
3194
LOAD_CMDP = fas->f_last_msgout = MSG_IDENTIFY | lun;
usr/src/uts/sun/io/scsi/adapters/fas.c
3197
LOAD_CMDP = fas->f_last_msgout = MSG_DR_IDENTIFY | lun;
usr/src/uts/sun/io/scsi/adapters/fas.c
3207
((fas->f_wide_known | fas->f_nowide) &
usr/src/uts/sun/io/scsi/adapters/fas.c
3208
(fas->f_sync_known | fas->f_nosync) & tshift)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
321
static void fas_set_all_lun_throttles(struct fas *fas, int slot, int what);
usr/src/uts/sun/io/scsi/adapters/fas.c
3213
fas->f_last_msgout = LOAD_CMDP = sp->cmd_tag[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
322
static void fas_full_throttle(struct fas *fas, int slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
323
static void fas_remove_cmd(struct fas *fas, struct fas_cmd *sp, int timeout);
usr/src/uts/sun/io/scsi/adapters/fas.c
3232
fas->f_omsglen = sp->cmd_cdb[FAS_PROXY_DATA];
usr/src/uts/sun/io/scsi/adapters/fas.c
3233
for (i = 0; i < (uint_t)fas->f_omsglen; i++) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3234
fas->f_cur_msgout[i] =
usr/src/uts/sun/io/scsi/adapters/fas.c
324
static void fas_decrement_ncmds(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3245
} else if (((fas->f_wide_known | fas->f_nowide) & tshift) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3250
fas->f_cur_msgout[i++] = sp->cmd_tag[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
3251
fas->f_cur_msgout[i++] = sp->cmd_tag[1];
usr/src/uts/sun/io/scsi/adapters/fas.c
326
static int fas_quiesce_bus(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3261
fas_make_wdtr(fas, i, target, FAS_XFER_WIDTH);
usr/src/uts/sun/io/scsi/adapters/fas.c
327
static int fas_unquiesce_bus(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3270
} else if (((fas->f_sync_known | fas->f_nosync) & tshift) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3278
fas->f_cur_msgout[i++] = sp->cmd_tag[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
3279
fas->f_cur_msgout[i++] = sp->cmd_tag[1];
usr/src/uts/sun/io/scsi/adapters/fas.c
3282
fas_make_sdtr(fas, i, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
329
static int fas_check_outstanding(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
331
static int fas_create_arq_pkt(struct fas *fas, struct scsi_address *ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
3310
fas->f_lastcount = (uintptr_t)tp - (uintptr_t)fas->f_cmdarea;
usr/src/uts/sun/io/scsi/adapters/fas.c
3315
fas_reg_write(fas, (uchar_t *)&fasreg->fas_busid,
usr/src/uts/sun/io/scsi/adapters/fas.c
3318
FAS_SET_PERIOD_OFFSET_CONF3_REGS(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
332
static int fas_delete_arq_pkt(struct fas *fas, struct scsi_address *ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
3320
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
3322
FAS_DMA_READ(fas, fas->f_lastcount,
usr/src/uts/sun/io/scsi/adapters/fas.c
3323
fas->f_dmacookie.dmac_address, 16, cmd);
usr/src/uts/sun/io/scsi/adapters/fas.c
3325
New_state(fas, (int)nstate);
usr/src/uts/sun/io/scsi/adapters/fas.c
3329
fas_dump_cmd(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
333
static int fas_handle_sts_chk(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3338
ASSERT(fas->f_tcmds[slot] >= 1);
usr/src/uts/sun/io/scsi/adapters/fas.c
3352
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
336
void fas_call_pkt_comp(struct fas *fas, struct fas_cmd *sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3366
struct fas *fas = (struct fas *)arg;
usr/src/uts/sun/io/scsi/adapters/fas.c
337
void fas_empty_callbackQ(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3373
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
3376
if (fas_intr_svc(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
338
int fas_init_callbacks(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3383
if (fas->f_polled_intr) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3385
fas->f_polled_intr = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
339
void fas_destroy_callbacks(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3390
} while (INTPENDING(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
3392
if (!kstat_updated && fas->f_intr_kstat &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3394
FAS_KSTAT_INTR(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3401
FAS_CHECK_WAITQ_AND_FAS_MUTEX_EXIT(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3402
FAS_EMPTY_CALLBACKQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3404
} while (INTPENDING(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
341
static int fas_check_dma_error(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3417
fas_intr_svc(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3419
static int (*evec[])(struct fas *fas) = {
usr/src/uts/sun/io/scsi/adapters/fas.c
342
static int fas_init_chip(struct fas *fas, uchar_t id);
usr/src/uts/sun/io/scsi/adapters/fas.c
3433
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
344
static void fas_read_fifo(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3443
fas->f_stat = fas_reg_read(fas, &fasreg->fas_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
3445
EPRINTF2("fas_intr_svc: state=%x stat=%x\n", fas->f_state,
usr/src/uts/sun/io/scsi/adapters/fas.c
3446
fas->f_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
345
static void fas_write_fifo(struct fas *fas, uchar_t *buf, int length, int pad);
usr/src/uts/sun/io/scsi/adapters/fas.c
3451
if ((fas->f_stat & FAS_STAT_IPEND) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3452
if (fas_check_dma_error(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3462
if (fas->f_state == ACTS_RESET) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3472
if ((fas->f_stat & FAS_STAT_GERR) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3473
(fas->f_stat & FAS_STAT_PERR) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3474
action = fas_handle_gross_err(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
348
static void fas_reg_cmd_write(struct fas *fas, uint8_t cmd);
usr/src/uts/sun/io/scsi/adapters/fas.c
3485
fas->f_intr =
usr/src/uts/sun/io/scsi/adapters/fas.c
3486
intr = fas_reg_read(fas, (uchar_t *)&fasreg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
349
static void fas_reg_write(struct fas *fas, volatile uint8_t *p, uint8_t what);
usr/src/uts/sun/io/scsi/adapters/fas.c
3492
stat = fas->f_stat & FAS_PHASE_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
3496
((fas->f_state & STATE_SELECTING) == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3497
(fas->f_state != ACTS_DATA_DONE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3498
(fas->f_state != ACTS_C_CMPLT))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
350
static uint8_t fas_reg_read(struct fas *fas, volatile uint8_t *p);
usr/src/uts/sun/io/scsi/adapters/fas.c
3500
fas->f_stat2 = fas_reg_read(fas, &fasreg->fas_stat2);
usr/src/uts/sun/io/scsi/adapters/fas.c
3502
if (((fas->f_stat2 & FAS_STAT2_EMPTY) == 0) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
3503
(fas->f_stat2 & FAS_STAT2_ISHUTTLE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3504
fas_read_fifo(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3508
EPRINTF2("fas_intr_svc: intr=%x, stat=%x\n", fas->f_intr, fas->f_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
3509
EPRINTF2("dmacsr=%b\n", fas->f_dma->dma_csr, dma_bits);
usr/src/uts/sun/io/scsi/adapters/fas.c
352
static void fas_dma_reg_write(struct fas *fas, volatile uint32_t *p,
usr/src/uts/sun/io/scsi/adapters/fas.c
3535
if (fas->f_state & STATE_SELECTING) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3536
action = fas_finish_select(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3538
} else if (fas->f_state & STATE_ITPHASES) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3539
action = fas_phasemanage(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
354
static uint32_t fas_dma_reg_read(struct fas *fas, volatile uint32_t *p);
usr/src/uts/sun/io/scsi/adapters/fas.c
3542
fas_log(fas, CE_WARN, "spurious interrupt");
usr/src/uts/sun/io/scsi/adapters/fas.c
3549
if ((fas->f_state & STATE_SELECTING) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3550
ASSERT(fas->f_state == STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
3551
action = fas_reconnect(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3553
action = fas_reselect_preempt(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3557
action = fas_illegal_cmd_or_bus_reset(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
356
#define fas_reg_cmd_write(fas, cmd) \
usr/src/uts/sun/io/scsi/adapters/fas.c
3568
fas, action, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
357
fas->f_reg->fas_cmd = (cmd), fas->f_last_cmd = (cmd)
usr/src/uts/sun/io/scsi/adapters/fas.c
3570
action = (*evec[action])(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
358
#define fas_reg_write(fas, p, what) *(p) = (what)
usr/src/uts/sun/io/scsi/adapters/fas.c
3582
fas_phasemanage(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3586
static int (*pvecs[])(struct fas *fas) = {
usr/src/uts/sun/io/scsi/adapters/fas.c
359
#define fas_reg_read(fas, p) *(p)
usr/src/uts/sun/io/scsi/adapters/fas.c
360
#define fas_dma_reg_write(fas, p, what) *(p) = (what)
usr/src/uts/sun/io/scsi/adapters/fas.c
3609
fas_state_name(fas->f_state & STATE_ITPHASES));
usr/src/uts/sun/io/scsi/adapters/fas.c
361
#define fas_dma_reg_read(fas, p) *(p)
usr/src/uts/sun/io/scsi/adapters/fas.c
3612
"fas_phasemanage_call: fas 0x%p (%d)", fas, i++);
usr/src/uts/sun/io/scsi/adapters/fas.c
3614
state = fas->f_state;
usr/src/uts/sun/io/scsi/adapters/fas.c
3618
action = (*pvecs[state-1]) (fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3620
fas_log(fas, CE_WARN, "lost state in phasemanage");
usr/src/uts/sun/io/scsi/adapters/fas.c
3637
fas_remove_cmd(struct fas *fas, struct fas_cmd *sp, int new_timeout_flag)
usr/src/uts/sun/io/scsi/adapters/fas.c
3641
struct f_slots *tag_slots = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
3649
fas->f_tcmds[slot]--;
usr/src/uts/sun/io/scsi/adapters/fas.c
3651
if (fas->f_current_sp == sp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3652
fas->f_current_sp = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
3655
ASSERT(sp != fas->f_active[sp->cmd_slot]->f_slot[sp->cmd_tag[1]]);
usr/src/uts/sun/io/scsi/adapters/fas.c
3674
if (fas->f_tcmds[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3705
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
3712
fas_decrement_ncmds(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
3716
fas->f_ncmds--;
usr/src/uts/sun/io/scsi/adapters/fas.c
3718
fas->f_ndisc--;
usr/src/uts/sun/io/scsi/adapters/fas.c
3723
ASSERT((fas->f_ncmds >= 0) && (fas->f_ndisc >= 0));
usr/src/uts/sun/io/scsi/adapters/fas.c
3724
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
3733
fas_finish(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3735
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3754
fas_reg_cmd_write(fas, CMD_EN_RESEL);
usr/src/uts/sun/io/scsi/adapters/fas.c
3765
fas_force_renegotiation(fas, Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
3772
fas_sync_wide_backoff(fas, sp, sp->cmd_slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
3785
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3786
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
3787
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3788
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3793
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
3795
if ((fas->f_ncmds > fas->f_ndisc) && (*((char *)status) == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
3796
(INTPENDING(fas) == 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3797
if (fas_ustart(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3819
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3828
if (fas_handle_sts_chk(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
3838
fas_handle_qfull(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3855
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
3867
fas_finish_select(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
3869
volatile struct dma *dmar = fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
3870
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
3871
uchar_t intr = fas->f_intr;
usr/src/uts/sun/io/scsi/adapters/fas.c
3874
step = fas_reg_read(fas, &fas->f_reg->fas_step) & FAS_STEP_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
3884
if ((fas->f_dma_csr = fas_dma_reg_read(fas, &dmar->dma_csr))
usr/src/uts/sun/io/scsi/adapters/fas.c
3891
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
3893
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
3903
FAS_FLUSH_DMA(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
3966
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
3982
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
3985
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
3992
fas_force_renegotiation(fas, Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
3994
fas->f_sdtr_sent = fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
4003
if (fas->f_reset_delay[Tgt(sp)] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4004
fas->f_throttle[sp->cmd_slot] = DRAIN_THROTTLE;
usr/src/uts/sun/io/scsi/adapters/fas.c
4007
fas_set_pkt_reason(fas, sp, CMD_INCOMPLETE, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4013
fas_printstate(fas, "undetermined selection failure");
usr/src/uts/sun/io/scsi/adapters/fas.c
4027
fas_reselect_preempt(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
403
rval = ddi_soft_state_init(&fas_state, sizeof (struct fas),
usr/src/uts/sun/io/scsi/adapters/fas.c
4035
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4040
FAS_FLUSH_DMA(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4045
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
4046
rval = fas_reconnect(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4054
fas->f_throttle[sp->cmd_slot] = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
4057
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4063
if (fas->f_wdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4064
fas->f_wide_known &= ~(1<<Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
4065
fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
4067
if (fas->f_sdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4068
fas->f_sync_known &= ~(1<<Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
4069
fas->f_sdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
4072
fas_head_of_readyQ(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
4081
fas_reconnect(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
4083
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
4094
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4096
switch (fas->f_state) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4104
target = fas->f_fifo[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
4110
FAS_SET_PERIOD_OFFSET_CONF3_REGS(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
4118
fas_reg_cmd_write(fas, CMD_MSG_ACPT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4120
if (fas->f_fifolen != 2) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4129
New_state(fas, ACTS_RESEL);
usr/src/uts/sun/io/scsi/adapters/fas.c
4131
if (fas->f_stat & FAS_STAT_PERR) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4138
tmp = fas->f_fifo[1];
usr/src/uts/sun/io/scsi/adapters/fas.c
4139
fas->f_last_msgin = tmp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4151
fas->f_resel_slot = slot = (target * NLUNS_PER_TARGET) | lun;
usr/src/uts/sun/io/scsi/adapters/fas.c
4153
fas_reg_write(fas, (uchar_t *)&fasreg->fas_busid,
usr/src/uts/sun/io/scsi/adapters/fas.c
4163
if (TAGGED(target) && fas->f_tcmds[slot] &&
usr/src/uts/sun/io/scsi/adapters/fas.c
4164
(fas->f_active[slot]->f_slot[0] == NULL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4166
(uchar_t *)fas->f_cmdarea;
usr/src/uts/sun/io/scsi/adapters/fas.c
4179
FAS_DMA_WRITE_SETUP(fas, 2,
usr/src/uts/sun/io/scsi/adapters/fas.c
4180
fas->f_dmacookie.dmac_address);
usr/src/uts/sun/io/scsi/adapters/fas.c
4188
if (INTPENDING(fas) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4196
fas->f_stat = fas_reg_read(fas, &fasreg->fas_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
4197
fas->f_intr = fas_reg_read(fas, &fasreg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
4198
if (fas->f_intr & (FAS_INT_ILLEGAL | FAS_INT_RESET)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4199
return (fas_illegal_cmd_or_bus_reset(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4202
if ((fas->f_stat & FAS_PHASE_MASK) !=
usr/src/uts/sun/io/scsi/adapters/fas.c
4208
if (fas->f_intr & FAS_INT_DISCON) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4213
fas->f_current_sp = sp = fas->f_active[slot]->f_slot[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
4221
(uchar_t *)fas->f_cmdarea;
usr/src/uts/sun/io/scsi/adapters/fas.c
4226
slot = fas->f_resel_slot;
usr/src/uts/sun/io/scsi/adapters/fas.c
4229
if ((fas->f_stat & FAS_PHASE_MASK) !=
usr/src/uts/sun/io/scsi/adapters/fas.c
4232
if (fas->f_intr & ~(FAS_INT_BUS |
usr/src/uts/sun/io/scsi/adapters/fas.c
4234
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
4244
fas_reg_cmd_write(fas, CMD_TRAN_INFO|CMD_DMA);
usr/src/uts/sun/io/scsi/adapters/fas.c
4245
fas_dma_reg_write(fas, &fas->f_dma->dma_csr,
usr/src/uts/sun/io/scsi/adapters/fas.c
4246
fas->f_dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
4248
fas_reg_cmd_write(fas, CMD_MSG_ACPT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4256
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4257
fas->f_stat = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
4258
(uchar_t *)&fas->f_reg->fas_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
4259
fas->f_intr = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
4260
(uchar_t *)&fas->f_reg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
4261
if (fas->f_intr & (FAS_INT_RESET |
usr/src/uts/sun/io/scsi/adapters/fas.c
4265
(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4267
if (fas->f_intr & FAS_INT_FCMP) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4278
FAS_FLUSH_DMA(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4296
if (fas->f_stat & FAS_STAT_PERR) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4300
if ((fas->f_stat & FAS_STAT_XZERO) == 0 ||
usr/src/uts/sun/io/scsi/adapters/fas.c
4315
tag_slots = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
4323
fas->f_current_sp = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4327
if (fas->f_stat & FAS_STAT_PERR) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4367
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4368
fas->f_omsglen = sp->cmd_cdb[FAS_PROXY_DATA];
usr/src/uts/sun/io/scsi/adapters/fas.c
4370
while (tmp < fas->f_omsglen) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4371
fas->f_cur_msgout[tmp] =
usr/src/uts/sun/io/scsi/adapters/fas.c
4381
fas->f_ndisc++;
usr/src/uts/sun/io/scsi/adapters/fas.c
4382
ASSERT((fas->f_ncmds >= 0) && (fas->f_ndisc >= 0));
usr/src/uts/sun/io/scsi/adapters/fas.c
4383
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
4386
ASSERT(fas->f_resel_slot == slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
4387
ASSERT(fas->f_ndisc > 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4388
fas->f_ndisc--;
usr/src/uts/sun/io/scsi/adapters/fas.c
4390
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
4413
if (sp && (fas->f_stat & FAS_STAT_PERR)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4416
fas_log(fas, CE_WARN, "target %x: failed reselection (%s)",
usr/src/uts/sun/io/scsi/adapters/fas.c
4420
fas_printstate(fas, "failed reselection");
usr/src/uts/sun/io/scsi/adapters/fas.c
4433
fas_handle_unknown(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
4436
"fas_handle_unknown_start: fas 0x%p", fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4439
if ((fas->f_intr & FAS_INT_DISCON) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4444
switch (fas->f_stat & FAS_PHASE_MASK) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4447
New_state(fas, ACTS_DATA);
usr/src/uts/sun/io/scsi/adapters/fas.c
4451
return (fas_handle_data_start(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4454
New_state(fas, ACTS_MSG_OUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4458
return (fas_handle_msg_out_start(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4461
New_state(fas, ACTS_MSG_IN);
usr/src/uts/sun/io/scsi/adapters/fas.c
4465
return (fas_handle_msg_in_start(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4468
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
4470
if (fas_ptest_status & (1<<Tgt(fas->f_current_sp))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4471
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4475
fas_reg_cmd_write(fas, CMD_COMP_SEQ);
usr/src/uts/sun/io/scsi/adapters/fas.c
4476
New_state(fas, ACTS_C_CMPLT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4481
return (fas_handle_c_cmplt(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4484
New_state(fas, ACTS_CMD_START);
usr/src/uts/sun/io/scsi/adapters/fas.c
4488
return (fas_handle_cmd_start(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4491
fas_printstate(fas, "Unknown bus phase");
usr/src/uts/sun/io/scsi/adapters/fas.c
4510
int msgout = fas->f_cur_msgout[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
4511
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4515
msgout = fas->f_cur_msgout[2];
usr/src/uts/sun/io/scsi/adapters/fas.c
4518
fas->f_cur_msgout[0], fas->f_cur_msgout[1],
usr/src/uts/sun/io/scsi/adapters/fas.c
4519
fas->f_cur_msgout[2], fas->f_last_msgout);
usr/src/uts/sun/io/scsi/adapters/fas.c
4529
fas->f_abort_msg_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
4531
fas_set_pkt_reason(fas, sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
4535
fas->f_reset_msg_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
4537
fas_set_pkt_reason(fas, sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
4540
fas_force_renegotiation(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
4543
if ((fas->f_last_msgout == MSG_EXTENDED) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
4544
(fas->f_last_msgin == MSG_REJECT)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4550
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
4551
fas_reg_cmd_write(fas, CMD_EN_RESEL);
usr/src/uts/sun/io/scsi/adapters/fas.c
4552
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
4553
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
4554
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4556
(void) fas_accept_pkt(fas, sp, NO_TRAN_BUSY);
usr/src/uts/sun/io/scsi/adapters/fas.c
4557
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4563
} else if (fas->f_last_msgout == MSG_EXTENDED) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4568
fas_reset_sync_wide(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4569
fas->f_sdtr_sent = fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
4572
fas_set_pkt_reason(fas, sp, CMD_UNX_BUS_FREE, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4574
fas_printstate(fas, "unexpected bus free");
usr/src/uts/sun/io/scsi/adapters/fas.c
4589
fas_handle_clearing(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
4591
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4597
if (fas->f_laststate == ACTS_C_CMPLT ||
usr/src/uts/sun/io/scsi/adapters/fas.c
4598
fas->f_laststate == ACTS_MSG_IN_DONE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4599
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4600
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
4602
fas->f_stat = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
4604
fas->f_intr = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
4606
if (fas->f_intr & (FAS_INT_RESET | FAS_INT_ILLEGAL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4607
return (fas_illegal_cmd_or_bus_reset(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4613
fas->f_laststate = ACTS_CLEARING;
usr/src/uts/sun/io/scsi/adapters/fas.c
4621
if (fas->f_intr == FAS_INT_DISCON) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4630
fas->f_last_msgout = 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
4631
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
4632
if (fas->f_last_msgin == MSG_DISCONNECT) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4634
fas_reg_cmd_write(fas, CMD_EN_RESEL);
usr/src/uts/sun/io/scsi/adapters/fas.c
4636
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
4638
ASSERT(fas->f_current_sp != NULL);
usr/src/uts/sun/io/scsi/adapters/fas.c
464
struct fas *fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
4644
fas->f_ndisc++;
usr/src/uts/sun/io/scsi/adapters/fas.c
4646
ASSERT((fas->f_ncmds >= 0) && (fas->f_ndisc >= 0));
usr/src/uts/sun/io/scsi/adapters/fas.c
4647
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
4649
fas->f_current_sp = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
4654
if ((fas->f_ncmds > fas->f_ndisc) && fas_ustart(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4669
return (fas_finish(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4678
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
4680
Tgt(sp), scsi_mname(fas->f_last_msgin));
usr/src/uts/sun/io/scsi/adapters/fas.c
4682
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4686
fas->f_cur_msgout[0], fas->f_cur_msgout[1],
usr/src/uts/sun/io/scsi/adapters/fas.c
4687
fas->f_cur_msgout[2], fas->f_last_msgout);
usr/src/uts/sun/io/scsi/adapters/fas.c
4688
IPRINTF1("last msgin=%x\n", fas->f_last_msgin);
usr/src/uts/sun/io/scsi/adapters/fas.c
469
fas = TRAN2FAS(tran);
usr/src/uts/sun/io/scsi/adapters/fas.c
4700
fas_handle_data_start(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
4704
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4712
fas_printstate(fas, "unexpected data phase");
usr/src/uts/sun/io/scsi/adapters/fas.c
4714
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4724
if (fas_restore_pointers(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
475
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4751
if (fas_next_window(fas, sp, end)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
476
fas_force_renegotiation(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
4762
if (fas->f_dma_attr->dma_attr_count_max < amt) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4763
amt = fas->f_dma_attr->dma_attr_count_max;
usr/src/uts/sun/io/scsi/adapters/fas.c
477
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4772
if ((end & ~fas->f_dma_attr->dma_attr_seg) !=
usr/src/uts/sun/io/scsi/adapters/fas.c
4773
(sp->cmd_cur_addr & ~fas->f_dma_attr->dma_attr_seg)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4776
sp->cmd_cur_addr, end, fas->f_dma_attr->dma_attr_seg);
usr/src/uts/sun/io/scsi/adapters/fas.c
4777
amt = (end & ~fas->f_dma_attr->dma_attr_seg) - sp->cmd_cur_addr;
usr/src/uts/sun/io/scsi/adapters/fas.c
4778
if (amt == 0 || amt > fas->f_dma_attr->dma_attr_count_max) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4779
fas_log(fas, CE_WARN, "illegal dma boundary? %x", amt);
usr/src/uts/sun/io/scsi/adapters/fas.c
4794
fas->f_lastcount = amt;
usr/src/uts/sun/io/scsi/adapters/fas.c
4799
phase = fas->f_stat & FAS_PHASE_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
4802
FAS_DMA_WRITE(fas, amt, sp->cmd_cur_addr,
usr/src/uts/sun/io/scsi/adapters/fas.c
4805
FAS_DMA_READ(fas, amt, sp->cmd_cur_addr, amt,
usr/src/uts/sun/io/scsi/adapters/fas.c
4808
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
4810
fas_set_pkt_reason(fas, sp, CMD_DMA_DERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4818
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4822
New_state(fas, ACTS_DATA_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
4830
fas_handle_data_done(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
4832
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
4833
volatile struct dma *dmar = fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
4834
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
4844
stat = fas->f_stat;
usr/src/uts/sun/io/scsi/adapters/fas.c
4850
if ((fas->f_dma_csr = fas_dma_reg_read(fas, &dmar->dma_csr)) &
usr/src/uts/sun/io/scsi/adapters/fas.c
4857
fas_log(fas, CE_WARN, "Unrecoverable DMA error on dma %s",
usr/src/uts/sun/io/scsi/adapters/fas.c
4859
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
487
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
4882
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
4884
fas->f_cur_msgout[0] = MSG_INITIATOR_ERROR;
usr/src/uts/sun/io/scsi/adapters/fas.c
4885
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
489
((fas->f_target_scsi_options_defined & (1 << tgt)) == 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4891
FAS_FLUSH_DMA(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4899
if (fas->f_intr != FAS_INT_BUS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4900
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
4911
fifoamt = FIFO_CNT(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
4912
if (fas->f_wide_enabled & (1<<tgt)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4917
xfer_amt = fas->f_lastcount;
usr/src/uts/sun/io/scsi/adapters/fas.c
4920
xfer_amt = fas->f_lastcount - xfer_amt;
usr/src/uts/sun/io/scsi/adapters/fas.c
4923
fifoamt, xfer_amt, fas->f_lastcount, stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
494
fas->f_target_scsi_options[tgt] = options;
usr/src/uts/sun/io/scsi/adapters/fas.c
4947
fas->f_stat2 = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
495
fas_log(fas, CE_NOTE,
usr/src/uts/sun/io/scsi/adapters/fas.c
4950
if (((fas->f_stat & FAS_STAT_XZERO) == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
4953
(fas->f_stat2 & FAS_STAT2_ISHUTTLE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
4954
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
4956
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
4969
if (fas->f_offset[tgt]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
497
fas->f_target_scsi_options[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
4976
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
498
fas_force_renegotiation(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
4982
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
4993
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
4999
fas->f_state = ACTS_DATA;
usr/src/uts/sun/io/scsi/adapters/fas.c
5003
return (fas_handle_data_start(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5008
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
501
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5014
fas_handle_c_cmplt(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5016
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5017
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
5029
if (fas->f_laststate == ACTS_UNKNOWN) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5030
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5031
fas->f_stat = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5033
intr = fas_reg_read(fas, (uchar_t *)&fasreg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
5034
fas->f_intr = intr;
usr/src/uts/sun/io/scsi/adapters/fas.c
5035
if (fas->f_intr & (FAS_INT_RESET | FAS_INT_ILLEGAL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5036
return (fas_illegal_cmd_or_bus_reset(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
504
tgt, fas->f_target_scsi_options[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
5042
fas->f_laststate = ACTS_C_CMPLT;
usr/src/uts/sun/io/scsi/adapters/fas.c
5049
intr = fas->f_intr;
usr/src/uts/sun/io/scsi/adapters/fas.c
5055
fas->f_stat |= FAS_STAT_PERR;
usr/src/uts/sun/io/scsi/adapters/fas.c
5062
fas->f_stat |= FAS_STAT_PERR;
usr/src/uts/sun/io/scsi/adapters/fas.c
5070
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5073
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5076
if ((perr = (fas->f_stat & FAS_STAT_PERR)) != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5077
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5096
sts = fas_reg_read(fas, (uchar_t *)&fasreg->fas_fifo_data);
usr/src/uts/sun/io/scsi/adapters/fas.c
5097
fas->f_last_msgin = fas->f_imsgarea[0] =
usr/src/uts/sun/io/scsi/adapters/fas.c
5098
msg = fas_reg_read(fas, (uchar_t *)&fasreg->fas_fifo_data);
usr/src/uts/sun/io/scsi/adapters/fas.c
5100
fas_reg_cmd_write(fas, CMD_MSG_ACPT);
usr/src/uts/sun/io/scsi/adapters/fas.c
5114
fas_log(fas, CE_WARN, msginperr);
usr/src/uts/sun/io/scsi/adapters/fas.c
5117
fas->f_cur_msgout[0] = MSG_MSG_PARITY;
usr/src/uts/sun/io/scsi/adapters/fas.c
5118
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5119
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5130
sts = fas_reg_read(fas, (uchar_t *)&fasreg->fas_fifo_data);
usr/src/uts/sun/io/scsi/adapters/fas.c
5143
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5145
fas->f_cur_msgout[0] = MSG_INITIATOR_ERROR;
usr/src/uts/sun/io/scsi/adapters/fas.c
5146
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5147
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5151
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5157
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5160
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5172
New_state(fas, ACTS_CLEARING);
usr/src/uts/sun/io/scsi/adapters/fas.c
5176
return (fas_handle_clearing(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5178
fas->f_imsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5179
fas->f_imsgindex = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5180
New_state(fas, ACTS_MSG_IN_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5184
return (fas_handle_msg_in_done(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5192
fas_handle_msg_in_start(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5203
if (!FIFO_EMPTY(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5204
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5206
fas_reg_cmd_write(fas, CMD_TRAN_INFO);
usr/src/uts/sun/io/scsi/adapters/fas.c
5207
fas->f_imsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5208
fas->f_imsgindex = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
5209
New_state(fas, ACTS_MSG_IN_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5234
fas_handle_more_msgin(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
524
struct fas *fas = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
5240
if (fas->f_intr & FAS_INT_BUS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5241
if ((fas->f_stat & FAS_PHASE_MASK) == FAS_PHASE_MSG_IN) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5245
fas_reg_cmd_write(fas, CMD_TRAN_INFO);
usr/src/uts/sun/io/scsi/adapters/fas.c
5246
New_state(fas, ACTS_MSG_IN_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5263
if (fas->f_imsglen != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5264
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5268
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5271
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5275
fas_handle_msg_in_done(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5277
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5278
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
5285
if (fas->f_laststate == ACTS_MSG_IN) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5286
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5287
fas->f_stat = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5289
fas->f_stat2 = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5292
fas_read_fifo(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5294
fas->f_intr = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5296
if (fas->f_intr & (FAS_INT_RESET | FAS_INT_ILLEGAL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5297
return (fas_illegal_cmd_or_bus_reset(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5303
fas->f_laststate = ACTS_MSG_IN_DONE;
usr/src/uts/sun/io/scsi/adapters/fas.c
5317
if (((fas->f_laststate == ACTS_MSG_IN) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
5318
(fas->f_laststate == ACTS_MSG_IN_DONE)) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5319
((fas->f_intr & FAS_INT_DISCON) == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5320
((fas->f_stat & FAS_STAT_PERR) == 0) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5323
if ((fas->f_fifolen == 1) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5324
(fas->f_imsglen == 1) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5325
(fas->f_fifo[0] == MSG_DISCONNECT)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5327
fas_reg_cmd_write(fas, CMD_MSG_ACPT);
usr/src/uts/sun/io/scsi/adapters/fas.c
5328
fas->f_imsgarea[fas->f_imsgindex++] = fas->f_fifo[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
5329
fas->f_last_msgin = MSG_DISCONNECT;
usr/src/uts/sun/io/scsi/adapters/fas.c
5330
New_state(fas, ACTS_CLEARING);
usr/src/uts/sun/io/scsi/adapters/fas.c
5336
return (fas_handle_clearing(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5354
if (fas->f_laststate != ACTS_C_CMPLT) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5359
if (fas->f_intr & FAS_INT_DISCON) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5360
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5362
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5374
if (fas->f_imsglen != 0 && (fas->f_stat & FAS_STAT_PERR)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5375
fas_log(fas, CE_WARN, msginperr);
usr/src/uts/sun/io/scsi/adapters/fas.c
5378
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5380
} else if ((msgin = fas->f_fifolen) != 1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5387
fas_printf(fas, "fifocount=%x", msgin);
usr/src/uts/sun/io/scsi/adapters/fas.c
5388
fas_printstate(fas, "input message botch");
usr/src/uts/sun/io/scsi/adapters/fas.c
5390
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5391
fas_log(fas, CE_WARN, "input message botch");
usr/src/uts/sun/io/scsi/adapters/fas.c
5393
} else if (fas->f_imsglen == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5399
msgin = fas_reg_read(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5401
New_state(fas, ACTS_MSG_IN_MORE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5404
msgin = fas->f_fifo[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
5405
fas->f_imsgarea[fas->f_imsgindex++] = msgin;
usr/src/uts/sun/io/scsi/adapters/fas.c
5414
msgin = fas->f_imsgarea[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
5422
if (sndmsg == 0 && fas->f_imsglen != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5424
if (fas->f_imsgindex < fas->f_imsglen) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5427
fas->f_imsgindex-1,
usr/src/uts/sun/io/scsi/adapters/fas.c
5428
fas->f_imsgarea[fas->f_imsgindex-1]);
usr/src/uts/sun/io/scsi/adapters/fas.c
5430
New_state(fas, ACTS_MSG_IN_MORE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5432
} else if (fas->f_imsglen == 1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5439
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5440
fas->f_stat |= FAS_STAT_PERR;
usr/src/uts/sun/io/scsi/adapters/fas.c
5441
fas->f_imsgindex -= 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5449
sndmsg = fas_onebyte_msg(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5451
} else if (fas->f_imsglen == 2) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5455
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5456
fas->f_stat |= FAS_STAT_PERR;
usr/src/uts/sun/io/scsi/adapters/fas.c
5457
fas->f_imsgindex -= 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5465
if (fas->f_imsgarea[0] == MSG_EXTENDED) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5474
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5475
tool, fas->f_imsgarea[0]);
usr/src/uts/sun/io/scsi/adapters/fas.c
5478
fas->f_imsglen = msgin + 2;
usr/src/uts/sun/io/scsi/adapters/fas.c
5479
New_state(fas, ACTS_MSG_IN_MORE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5482
sndmsg = fas_twobyte_msg(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5486
sndmsg = fas_multibyte_msg(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5502
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5504
fas->f_cur_msgout[0] = (uchar_t)sndmsg;
usr/src/uts/sun/io/scsi/adapters/fas.c
5527
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5528
New_state(fas, ACTS_MSG_IN_MORE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5529
fas->f_imsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
553
fas = TRAN2FAS(tran);
usr/src/uts/sun/io/scsi/adapters/fas.c
5532
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5534
fas_reg_cmd_write(fas, CMD_MSG_ACPT);
usr/src/uts/sun/io/scsi/adapters/fas.c
5536
if ((fas->f_laststate == ACTS_MSG_IN_DONE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5537
(fas->f_state == ACTS_CLEARING)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
554
if (!fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5540
return (fas_handle_clearing(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5548
fas_onebyte_msg(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5550
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5552
uchar_t msgin = fas->f_last_msgin = fas->f_imsgarea[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
5573
fas_log(fas, CE_WARN, "%s message 0x%x from Target %d",
usr/src/uts/sun/io/scsi/adapters/fas.c
5583
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5588
fas->f_imsglen = 2;
usr/src/uts/sun/io/scsi/adapters/fas.c
5589
New_state(fas, ACTS_MSG_IN_MORE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5593
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5609
fas->f_state = ACTS_CLEARING;
usr/src/uts/sun/io/scsi/adapters/fas.c
5619
uchar_t lastmsg = fas->f_last_msgout;
usr/src/uts/sun/io/scsi/adapters/fas.c
562
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
563
fas_internal_reset(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
5638
if (fas->f_wdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5643
fas_set_wide_conf3(fas, tgt, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
5644
fas->f_nowide |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
5645
fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
5649
if ((fas->f_nosync & (1<<tgt)) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5650
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5651
fas_make_sdtr(fas, 0, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
5653
} else if (fas->f_sdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5654
fas_reg_cmd_write(fas, CMD_CLR_ATN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5655
fas_revert_to_async(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
5656
fas->f_nosync |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
5657
fas->f_sdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
566
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
568
fas->f_suspended = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
571
(void) fas_istart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5713
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5716
fas_set_pkt_reason(fas, sp, reason, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
572
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5724
if (fas_restore_pointers(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5749
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5764
fas_handle_cmd_start(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5766
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5767
volatile uchar_t *tp = fas->f_cmdarea;
usr/src/uts/sun/io/scsi/adapters/fas.c
5778
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5780
FAS_DMA_READ(fas, amt, fas->f_dmacookie.dmac_address, amt,
usr/src/uts/sun/io/scsi/adapters/fas.c
5782
fas->f_lastcount = amt;
usr/src/uts/sun/io/scsi/adapters/fas.c
5784
New_state(fas, ACTS_CMD_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5792
fas_handle_cmd_done(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5794
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5795
uchar_t intr = fas->f_intr;
usr/src/uts/sun/io/scsi/adapters/fas.c
5796
volatile struct dma *dmar = fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
5809
fas_printstate(fas, "cmd transmission error");
usr/src/uts/sun/io/scsi/adapters/fas.c
5819
fas->f_dma_csr = fas_dma_reg_read(fas, &dmar->dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
5820
FAS_FLUSH_DMA(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5822
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5825
return (fas_handle_unknown(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
5832
fas_handle_msg_out_start(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5834
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5835
uchar_t *msgout = fas->f_cur_msgout;
usr/src/uts/sun/io/scsi/adapters/fas.c
5836
uchar_t amt = fas->f_omsglen;
usr/src/uts/sun/io/scsi/adapters/fas.c
5852
if ((fas->f_stat & FAS_PHASE_MASK) != FAS_PHASE_MSG_OUT &&
usr/src/uts/sun/io/scsi/adapters/fas.c
5853
fas->f_laststate == ACTS_MSG_OUT_DONE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5854
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5856
fas_set_pkt_reason(fas, sp, CMD_NOMSGOUT, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
5857
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
5866
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5873
amt = fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
5881
fas->f_last_msgout = *msgout;
usr/src/uts/sun/io/scsi/adapters/fas.c
5890
fas_write_fifo(fas, msgout, fas->f_omsglen, 1);
usr/src/uts/sun/io/scsi/adapters/fas.c
5891
fas_reg_cmd_write(fas, CMD_TRAN_INFO);
usr/src/uts/sun/io/scsi/adapters/fas.c
5893
EPRINTF2("amt=%x, last_msgout=%x\n", amt, fas->f_last_msgout);
usr/src/uts/sun/io/scsi/adapters/fas.c
5895
New_state(fas, ACTS_MSG_OUT_DONE);
usr/src/uts/sun/io/scsi/adapters/fas.c
5902
fas_handle_msg_out_done(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
5904
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
5907
int amt = fas->f_omsglen;
usr/src/uts/sun/io/scsi/adapters/fas.c
5912
msgout = fas->f_cur_msgout[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
5914
msgout = fas->f_cur_msgout[2];
usr/src/uts/sun/io/scsi/adapters/fas.c
5917
fas->f_cur_msgout[0], fas->f_cur_msgout[1],
usr/src/uts/sun/io/scsi/adapters/fas.c
5918
fas->f_cur_msgout[2], fas->f_last_msgout);
usr/src/uts/sun/io/scsi/adapters/fas.c
5925
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
5931
if (fas->f_intr == FAS_INT_DISCON) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5940
fas->f_abort_msg_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
5942
fas_set_pkt_reason(fas, sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
5946
fas->f_reset_msg_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
5948
fas_set_pkt_reason(fas, sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
5951
fas_force_renegotiation(fas, Tgt(sp));
usr/src/uts/sun/io/scsi/adapters/fas.c
5975
phase = fas->f_stat & FAS_PHASE_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
5984
if ((fas->f_intr & FAS_INT_BUS) && phase == FAS_PHASE_MSG_OUT) {
usr/src/uts/sun/io/scsi/adapters/fas.c
5991
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
5993
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
5996
New_state(fas, ACTS_MSG_OUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
6005
fas->f_last_msgout = msgout;
usr/src/uts/sun/io/scsi/adapters/fas.c
6006
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6007
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
6008
action = fas_handle_unknown(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6015
fas_twobyte_msg(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6017
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
6019
if ((fas->f_imsgarea[0] == MSG_IGNORE_WIDE_RESID) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
6020
(fas->f_imsgarea[1] == 1)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6033
IPRINTF1("ignore wide resid %d\n", fas->f_imsgarea[1]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6034
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
6038
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
6040
scsi_mname(fas->f_imsgarea[0]), fas->f_imsgarea[1]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6048
fas_multibyte_msg(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6058
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
6059
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
6060
uchar_t emsg = fas->f_imsgarea[2];
usr/src/uts/sun/io/scsi/adapters/fas.c
6071
period = fas->f_imsgarea[3] & 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
6072
offset = fas->f_imsgarea[4] & 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
6073
minsync = MIN_SYNC_PERIOD(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6074
maxsync = MAX_SYNC_PERIOD(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6076
fas->f_imsgarea[0], fas->f_imsgarea[1],
usr/src/uts/sun/io/scsi/adapters/fas.c
6077
fas->f_imsgarea[2], fas->f_imsgarea[3],
usr/src/uts/sun/io/scsi/adapters/fas.c
6078
fas->f_imsgarea[4]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6084
fas->f_sync_period[tgt], fas->f_neg_period[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6086
if ((++(fas->f_sdtr_sent)) & 1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6103
period ? max(period, MIN_SYNC_PERIOD(fas)) : 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6105
if (fas->f_backoff & (1<<tgt)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6107
max(period, fas->f_neg_period[tgt]) : 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6149
clockval = fas->f_clock_cycle / 1000;
usr/src/uts/sun/io/scsi/adapters/fas.c
6161
fas->f_offset[tgt] = offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6162
fas->f_neg_period[tgt] = period;
usr/src/uts/sun/io/scsi/adapters/fas.c
6169
fas_make_sdtr(fas, 0, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6170
period = fas->f_neg_period[tgt];
usr/src/uts/sun/io/scsi/adapters/fas.c
6171
offset = (fas->f_offset[tgt] & 0xf);
usr/src/uts/sun/io/scsi/adapters/fas.c
6175
fas->f_sync_period[tgt] = regval & SYNC_PERIOD_MASK;
usr/src/uts/sun/io/scsi/adapters/fas.c
6176
fas_reg_write(fas, (uchar_t *)&fasreg->fas_sync_period,
usr/src/uts/sun/io/scsi/adapters/fas.c
6177
fas->f_sync_period[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6179
fas->f_offset[tgt] = offset | fas->f_req_ack_delay;
usr/src/uts/sun/io/scsi/adapters/fas.c
6180
fas_reg_write(fas, (uchar_t *)&fasreg->fas_sync_offset,
usr/src/uts/sun/io/scsi/adapters/fas.c
6181
fas->f_offset[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6188
fas->f_fasconf3[tgt] |= FAS_CONF3_FASTSCSI;
usr/src/uts/sun/io/scsi/adapters/fas.c
6190
fas->f_fasconf3[tgt] &= ~FAS_CONF3_FASTSCSI;
usr/src/uts/sun/io/scsi/adapters/fas.c
6193
fas_reg_write(fas, (uchar_t *)&fasreg->fas_conf3,
usr/src/uts/sun/io/scsi/adapters/fas.c
6194
fas->f_fasconf3[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6198
fas->f_sync_period[tgt] & SYNC_PERIOD_MASK,
usr/src/uts/sun/io/scsi/adapters/fas.c
6199
fas->f_offset[tgt] & 0xf, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6200
DPRINTF1("req/ack delay = %x\n", fas->f_req_ack_delay);
usr/src/uts/sun/io/scsi/adapters/fas.c
6201
DPRINTF1("conf3 = %x\n", fas->f_fasconf3[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6210
fas->f_clock_cycle) / 1000);
usr/src/uts/sun/io/scsi/adapters/fas.c
6211
xfer_rate = ((fas->f_nowide & (1<<tgt))? 1 : 2) *
usr/src/uts/sun/io/scsi/adapters/fas.c
622
fas = (struct fas *)ddi_get_soft_state(fas_state, instance);
usr/src/uts/sun/io/scsi/adapters/fas.c
6225
fas->f_sync_enabled |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6231
fas_revert_to_async(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6239
fas->f_nosync |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
624
if (fas == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6242
fas->f_props_update |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6245
uchar_t width = fas->f_imsgarea[3] & 0xff;
usr/src/uts/sun/io/scsi/adapters/fas.c
6248
fas->f_imsgarea[0], fas->f_imsgarea[1],
usr/src/uts/sun/io/scsi/adapters/fas.c
6249
fas->f_imsgarea[2], fas->f_imsgarea[3]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6254
if ((++(fas->f_wdtr_sent)) & 1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6261
fas->f_nowide &= ~(1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6262
fas_make_wdtr(fas, 0, tgt, width);
usr/src/uts/sun/io/scsi/adapters/fas.c
6271
fas_revert_to_async(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6272
fas->f_sync_known &= ~(1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6277
fas_set_wide_conf3(fas, tgt, width);
usr/src/uts/sun/io/scsi/adapters/fas.c
6279
fas->f_wdtr_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6280
if ((fas->f_nosync & (1<<tgt)) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6281
fas_make_sdtr(fas, 0, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6287
fas->f_props_update |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6292
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
6298
New_state(fas, ACTS_UNKNOWN);
usr/src/uts/sun/io/scsi/adapters/fas.c
6307
fas_revert_to_async(struct fas *fas, int tgt)
usr/src/uts/sun/io/scsi/adapters/fas.c
6309
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
6311
fas->f_sync_period[tgt] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6312
fas_reg_write(fas, (uchar_t *)&fasreg->fas_sync_period, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
6313
fas->f_offset[tgt] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6314
fas_reg_write(fas, (uchar_t *)&fasreg->fas_sync_offset, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
6315
fas->f_fasconf3[tgt] &= ~FAS_CONF3_FASTSCSI;
usr/src/uts/sun/io/scsi/adapters/fas.c
6316
fas_reg_write(fas, &fasreg->fas_conf3, fas->f_fasconf3[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6317
fas->f_sync_enabled &= ~(1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
6325
fas_handle_selection(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6327
fas_reg_cmd_write(fas, CMD_DISCONNECT);
usr/src/uts/sun/io/scsi/adapters/fas.c
6328
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
6329
fas_reg_cmd_write(fas, CMD_EN_RESEL);
usr/src/uts/sun/io/scsi/adapters/fas.c
6337
fas_restore_pointers(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
6345
if (fas_set_new_window(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6355
fas_set_new_window(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
637
&dev_attr, &fas->f_dmar_acc_handle) != DDI_SUCCESS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6374
fas_next_window(struct fas *fas, struct fas_cmd *sp, uint64_t end)
usr/src/uts/sun/io/scsi/adapters/fas.c
6391
if (fas_set_new_window(fas, sp)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6392
fas_printstate(fas, "cannot set new window");
usr/src/uts/sun/io/scsi/adapters/fas.c
6402
fas_printstate(fas, "data transfer overrun");
usr/src/uts/sun/io/scsi/adapters/fas.c
6403
fas_set_pkt_reason(fas, sp, CMD_DATA_OVR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
6410
fas_sync_wide_backoff(fas, sp, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
6422
fas_check_dma_error(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6427
if (fas->f_dma->dma_csr & DMA_ERRPEND) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6433
fas_log(fas, CE_WARN, "Unrecoverable DMA error");
usr/src/uts/sun/io/scsi/adapters/fas.c
6434
fas_printstate(fas, "dma error");
usr/src/uts/sun/io/scsi/adapters/fas.c
6435
fas_set_pkt_reason(fas, fas->f_current_sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
644
&dev_attr, &fas->f_regs_acc_handle) != DDI_SUCCESS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6445
fas_handle_gross_err(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6447
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
6449
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
6450
"gross error in fas status (%x)", fas->f_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
6453
fasreg->fas_cmd, fas->f_stat, fas->f_intr, fasreg->fas_step,
usr/src/uts/sun/io/scsi/adapters/fas.c
6456
fas_set_pkt_reason(fas, fas->f_current_sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
6458
fas_internal_reset(fas, FAS_RESET_FAS);
usr/src/uts/sun/io/scsi/adapters/fas.c
6467
fas_illegal_cmd_or_bus_reset(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
6474
ASSERT(fas->f_intr & (FAS_INT_ILLEGAL | FAS_INT_RESET));
usr/src/uts/sun/io/scsi/adapters/fas.c
6476
if (fas->f_intr & FAS_INT_RESET) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6487
if (fas->f_intr & FAS_INT_ILLEGAL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6488
IPRINTF1("lastcmd=%x\n", fas->f_reg->fas_cmd);
usr/src/uts/sun/io/scsi/adapters/fas.c
6489
fas_printstate(fas, "ILLEGAL bit set");
usr/src/uts/sun/io/scsi/adapters/fas.c
6500
fas_set_throttles(struct fas *fas, int slot, int n, int what)
usr/src/uts/sun/io/scsi/adapters/fas.c
6511
if (fas->f_softstate & (FAS_SS_QUIESCED | FAS_SS_DRAINING)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
652
DDI_DMA_SLEEP, NULL, &fas->f_dmahandle) != DDI_SUCCESS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6523
fas->f_throttle[i] = HOLD_THROTTLE;
usr/src/uts/sun/io/scsi/adapters/fas.c
6524
} else if ((fas->f_reset_delay[i/NLUNS_PER_TARGET]) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6527
fas->f_throttle[i] = (short)
usr/src/uts/sun/io/scsi/adapters/fas.c
6528
((fas->f_notag & tshift)? 1 : what);
usr/src/uts/sun/io/scsi/adapters/fas.c
6530
fas->f_throttle[i] = what;
usr/src/uts/sun/io/scsi/adapters/fas.c
6537
fas_set_all_lun_throttles(struct fas *fas, int slot, int what)
usr/src/uts/sun/io/scsi/adapters/fas.c
6542
fas_set_throttles(fas, slot, NLUNS_PER_TARGET, what);
usr/src/uts/sun/io/scsi/adapters/fas.c
6546
fas_full_throttle(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
6548
fas_set_throttles(fas, slot, 1, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
6555
fas_runpoll(struct fas *fas, short slot, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
6562
(void *)fas->f_current_sp, fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
6572
fas_set_all_lun_throttles(fas, slot, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
6574
if ((fas->f_state != STATE_FREE) || INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6575
if (fas_dopoll(fas, POLL_TIMEOUT) <= 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6581
ASSERT(fas->f_state == STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
6582
ASSERT(fas->f_current_sp == NULL);
usr/src/uts/sun/io/scsi/adapters/fas.c
6597
if ((fas->f_tcmds[slot]) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
6606
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
661
if (ddi_dma_mem_alloc(fas->f_dmahandle,
usr/src/uts/sun/io/scsi/adapters/fas.c
6627
if (fas->f_reset_delay[slot/NLUNS_PER_TARGET]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6629
drv_usecwait(fas->f_scsi_reset_delay * 1000);
usr/src/uts/sun/io/scsi/adapters/fas.c
6631
if (fas->f_reset_delay[i]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6634
fas->f_reset_delay[i] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
6636
fas_full_throttle(fas, s);
usr/src/uts/sun/io/scsi/adapters/fas.c
664
NULL, (caddr_t *)&fas->f_cmdarea, &rlen,
usr/src/uts/sun/io/scsi/adapters/fas.c
6646
if (fas_startcmd(fas, sp) != TRUE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6648
ASSERT(fas->f_current_sp != sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
665
&fas->f_cmdarea_acc_handle) != DDI_SUCCESS) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6670
if ((n = fas_dopoll(fas, limit)) <= 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6690
ASSERT(fas->f_state == STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
671
fas->f_reg = fasreg;
usr/src/uts/sun/io/scsi/adapters/fas.c
672
fas->f_dma = dmar;
usr/src/uts/sun/io/scsi/adapters/fas.c
6723
fas_set_all_lun_throttles(fas, slot, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
6729
fas_remove_cmd(fas, sp, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
673
fas->f_instance = instance;
usr/src/uts/sun/io/scsi/adapters/fas.c
6734
if ((fas->f_state == STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
6736
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6743
fas_log(fas, CE_WARN, "Polled cmd failed");
usr/src/uts/sun/io/scsi/adapters/fas.c
6745
fas_printstate(fas, "fas_runpoll: polled cmd failed");
usr/src/uts/sun/io/scsi/adapters/fas.c
6749
fas_set_all_lun_throttles(fas, slot, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
675
if (ddi_dma_addr_bind_handle(fas->f_dmahandle,
usr/src/uts/sun/io/scsi/adapters/fas.c
6755
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
6756
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
6757
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
676
NULL, (caddr_t)fas->f_cmdarea,
usr/src/uts/sun/io/scsi/adapters/fas.c
6760
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6773
fas_dopoll(struct fas *fas, int limit)
usr/src/uts/sun/io/scsi/adapters/fas.c
678
&fas->f_dmacookie, &count) != DDI_DMA_MAPPED) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6791
if (INTPENDING(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6792
fas->f_polled_intr = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
6794
(void) fas_intr_svc(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6795
if (fas->f_state == STATE_FREE)
usr/src/uts/sun/io/scsi/adapters/fas.c
6801
if (i >= limit && fas->f_state != STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6802
fas_printstate(fas, "polled command timeout");
usr/src/uts/sun/io/scsi/adapters/fas.c
6814
fas_make_sdtr(struct fas *fas, int msgout_offset, int target)
usr/src/uts/sun/io/scsi/adapters/fas.c
6816
uchar_t *p = fas->f_cur_msgout + msgout_offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6818
uchar_t period = MIN_SYNC_PERIOD(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
6827
if (fas->f_backoff & tshift) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6828
period = fas->f_neg_period[target];
usr/src/uts/sun/io/scsi/adapters/fas.c
6835
if (fas->f_sdtr_sent & 1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6836
period = fas->f_neg_period[target];
usr/src/uts/sun/io/scsi/adapters/fas.c
6837
offset = fas->f_offset[target];
usr/src/uts/sun/io/scsi/adapters/fas.c
6844
if (fas->f_force_async & tshift) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6851
if (fas->f_target_scsi_options[target] & SCSI_OPTIONS_FAST) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6855
} else if (fas->f_target_scsi_options[target] & SCSI_OPTIONS_SYNC) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6860
fas->f_nosync |= tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
6863
if (fas->f_nosync & tshift) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6868
offset = fas_default_offset | fas->f_req_ack_delay;
usr/src/uts/sun/io/scsi/adapters/fas.c
6871
fas->f_neg_period[target] = (uchar_t)period;
usr/src/uts/sun/io/scsi/adapters/fas.c
6872
fas->f_offset[target] = (uchar_t)offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6879
fas->f_omsglen = 5 + msgout_offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6887
fas->f_sdtr_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
6894
fas->f_sync_known |= 1<<target;
usr/src/uts/sun/io/scsi/adapters/fas.c
6895
fas->f_wide_known |= 1<<target;
usr/src/uts/sun/io/scsi/adapters/fas.c
6902
fas_make_wdtr(struct fas *fas, int msgout_offset, int target, int width)
usr/src/uts/sun/io/scsi/adapters/fas.c
6904
uchar_t *p = fas->f_cur_msgout + msgout_offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6906
if (((fas->f_target_scsi_options[target] & SCSI_OPTIONS_WIDE) == 0) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
6907
(fas->f_nowide & (1<<target))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6908
fas->f_nowide |= 1<<target;
usr/src/uts/sun/io/scsi/adapters/fas.c
6911
if (fas->f_force_narrow & (1<<target)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
6920
fas->f_omsglen = 4 + msgout_offset;
usr/src/uts/sun/io/scsi/adapters/fas.c
6927
fas->f_wdtr_sent++;
usr/src/uts/sun/io/scsi/adapters/fas.c
6933
fas->f_wide_known |= 1<<target;
usr/src/uts/sun/io/scsi/adapters/fas.c
6935
fas_set_wide_conf3(fas, target, width);
usr/src/uts/sun/io/scsi/adapters/fas.c
6943
fas_create_arq_pkt(struct fas *fas, struct scsi_address *ap)
usr/src/uts/sun/io/scsi/adapters/fas.c
6956
if (fas->f_arq_pkt[slot] != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
698
fas->f_tran = tran;
usr/src/uts/sun/io/scsi/adapters/fas.c
6981
fas->f_arq_pkt[slot] = rqpktp;
usr/src/uts/sun/io/scsi/adapters/fas.c
699
fas->f_dev = dip;
usr/src/uts/sun/io/scsi/adapters/fas.c
6998
fas_delete_arq_pkt(struct fas *fas, struct scsi_address *ap)
usr/src/uts/sun/io/scsi/adapters/fas.c
700
tran->tran_hba_private = fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
7007
if ((rqpktp = fas->f_arq_pkt[slot]) != NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7020
fas->f_arq_pkt[slot] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7032
struct fas *fas = ADDR2FAS(&pkt->pkt_address);
usr/src/uts/sun/io/scsi/adapters/fas.c
7042
ASSERT(sp == fas->f_arq_pkt[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7044
ASSERT(ssp != fas->f_active[sp->cmd_slot]->f_slot[sp->cmd_tag[1]]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7063
fas_sync_wide_backoff(fas, sp, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7066
fas_call_pkt_comp(fas, ssp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7073
fas_handle_sts_chk(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
7075
struct fas_cmd *arqsp = fas->f_arq_pkt[sp->cmd_slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
7082
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7090
ASSERT(sp != fas->f_active[sp->cmd_slot]->f_slot[sp->cmd_tag[1]]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7092
sp->cmd_slot, (void *)arqsp, (void *)fas->f_arq_pkt[sp->cmd_slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7116
fas_full_throttle(fas, sp->cmd_slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7117
(void) fas_accept_pkt(fas, arqsp, NO_TRAN_BUSY);
usr/src/uts/sun/io/scsi/adapters/fas.c
7121
fas_set_pkt_reason(fas, sp, CMD_TRAN_ERR, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
7122
fas_log(fas, CE_WARN, "auto request sense failed\n");
usr/src/uts/sun/io/scsi/adapters/fas.c
7123
fas_dump_cmd(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7124
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7133
fas_handle_qfull(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
7137
if ((++sp->cmd_qfull_retries > fas->f_qfull_retries[Tgt(sp)]) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
7138
(fas->f_qfull_retries[Tgt(sp)] == 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7150
fas_set_all_lun_throttles(fas, slot, DRAIN_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
7151
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7153
if (fas->f_reset_delay[Tgt(sp)] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7154
fas->f_throttle[slot] =
usr/src/uts/sun/io/scsi/adapters/fas.c
7155
max((fas->f_tcmds[slot] - 2), 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
7158
"retrying\n", Tgt(sp), Lun(sp), fas->f_throttle[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7161
(void) fas_accept_pkt(fas, sp, NO_TRAN_BUSY);
usr/src/uts/sun/io/scsi/adapters/fas.c
7170
if (fas->f_throttle[slot] == HOLD_THROTTLE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7177
fas_set_all_lun_throttles(fas, slot, QFULL_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
7178
if (fas->f_restart_cmd_timeid == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7179
fas->f_restart_cmd_timeid =
usr/src/uts/sun/io/scsi/adapters/fas.c
7180
timeout(fas_restart_cmd, fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
7181
fas->f_qfull_retry_interval[Tgt(sp)]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7193
struct fas *fas = fas_arg;
usr/src/uts/sun/io/scsi/adapters/fas.c
7198
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
7199
fas->f_restart_cmd_timeid = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7202
if (fas->f_reset_delay[i/NLUNS_PER_TARGET] == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7203
if (fas->f_throttle[i] == QFULL_THROTTLE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7204
fas_set_all_lun_throttles(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
7210
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7211
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
7223
struct fas *fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
7228
for (fas = fas_head; fas != (struct fas *)NULL; fas = fas->f_next) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7230
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
7231
IPRINTF2("ncmds=%x, ndisc=%x\n", fas->f_ncmds, fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
7234
if (fas->f_total_cmds) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7235
int n = fas->f_total_cmds;
usr/src/uts/sun/io/scsi/adapters/fas.c
7237
fas_log(fas, CE_NOTE,
usr/src/uts/sun/io/scsi/adapters/fas.c
7239
fas->f_total_cmds,
usr/src/uts/sun/io/scsi/adapters/fas.c
7240
fas->f_reg_cmds/n,
usr/src/uts/sun/io/scsi/adapters/fas.c
7241
fas->f_reg_reads/n, fas->f_reg_writes/n,
usr/src/uts/sun/io/scsi/adapters/fas.c
7242
fas->f_reg_dma_reads/n, fas->f_reg_dma_writes/n);
usr/src/uts/sun/io/scsi/adapters/fas.c
7244
fas->f_reg_reads = fas->f_reg_writes =
usr/src/uts/sun/io/scsi/adapters/fas.c
7245
fas->f_reg_dma_reads = fas->f_reg_dma_writes =
usr/src/uts/sun/io/scsi/adapters/fas.c
7246
fas->f_reg_cmds = fas->f_total_cmds = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7249
if (fas->f_ncmds) {
usr/src/uts/sun/io/scsi/adapters/fas.c
725
fas->f_force_async = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7251
fas_watchsubr(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7266
if ((fas->f_throttle[i] > HOLD_THROTTLE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
7267
(fas->f_active[i] &&
usr/src/uts/sun/io/scsi/adapters/fas.c
7268
(fas->f_active[i]->f_slot[0] == NULL))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7269
fas_full_throttle(fas, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
7274
if (fas->f_props_update) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7285
props_update = fas->f_props_update;
usr/src/uts/sun/io/scsi/adapters/fas.c
7286
fas->f_props_update = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7289
fas_update_props(fas, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
7293
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7308
fas_watchsubr(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
7311
int d = ((fas->f_dslot == 0)? 1 : fas->f_dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7319
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
732
fas->f_nowide = fas->f_notag = ALL_TARGETS;
usr/src/uts/sun/io/scsi/adapters/fas.c
7322
if (fas_force_timeout && fas->f_tcmds[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7323
fas_cmd_timeout(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7327
fas_test_reset(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7328
fas_test_abort(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
733
fas->f_force_narrow = ALL_TARGETS;
usr/src/uts/sun/io/scsi/adapters/fas.c
7334
tag_slots = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
7337
slot, fas->f_tcmds[slot], tag_slots->f_timeout);
usr/src/uts/sun/io/scsi/adapters/fas.c
7339
if ((fas->f_tcmds[slot] > 0) && (tag_slots->f_timebase)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7351
fas_cmd_timeout(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7359
fas_set_throttles(fas, 0, N_SLOTS,
usr/src/uts/sun/io/scsi/adapters/fas.c
7370
fas_cmd_timeout(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
7372
int d = ((fas->f_dslot == 0)? 1 : fas->f_dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7377
ASSERT(fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7389
if (fas->f_throttle[i] == DRAIN_THROTTLE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7390
fas_full_throttle(fas, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
7395
sp = fas->f_active[slot]->f_slot[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
7402
if (fas->f_current_sp && fas->f_state != STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7403
for (i = 0; (i < 10000) && (INTPENDING(fas) == 0); i++) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7406
if (INTPENDING(fas) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7407
slot = fas->f_current_sp->cmd_slot;
usr/src/uts/sun/io/scsi/adapters/fas.c
7408
sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
7418
n = fas->f_active[slot]->f_n_slots;
usr/src/uts/sun/io/scsi/adapters/fas.c
7420
ssp = fas->f_active[slot]->f_slot[tag];
usr/src/uts/sun/io/scsi/adapters/fas.c
7422
fas_set_pkt_reason(fas, ssp, CMD_TIMEOUT,
usr/src/uts/sun/io/scsi/adapters/fas.c
7424
fas_short_dump_cmd(fas, ssp);
usr/src/uts/sun/io/scsi/adapters/fas.c
743
fas->f_dslot = NLUNS_PER_TARGET;
usr/src/uts/sun/io/scsi/adapters/fas.c
7441
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7445
ASSERT(sp == fas->f_current_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7446
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7453
if (fas->f_state == ACTS_DATA_DONE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7454
fas_sync_wide_backoff(fas, sp, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7458
fas_printstate(fas, "timeout");
usr/src/uts/sun/io/scsi/adapters/fas.c
7461
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7463
fas->f_tcmds[slot], target, lun);
usr/src/uts/sun/io/scsi/adapters/fas.c
7466
if (fas_abort_cmd(fas, sp, slot) == ACTION_SEARCH) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7467
(void) fas_istart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7479
fas_sync_wide_backoff(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
7483
ushort_t state = fas->f_state;
usr/src/uts/sun/io/scsi/adapters/fas.c
7487
phase = fas_reg_read(fas, &fas->f_reg->fas_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
7504
if ((fas->f_backoff & tshift) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
7505
(fas->f_nosync & tshift)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7509
if ((fas->f_nowide & tshift) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7510
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7519
fas->f_target_scsi_options[tgt] &= ~SCSI_OPTIONS_WIDE;
usr/src/uts/sun/io/scsi/adapters/fas.c
7526
if (fas->f_offset[tgt] != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7531
if (fas->f_backoff & tshift) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7532
if ((fas->f_nosync & tshift) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7533
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7537
fas->f_target_scsi_options[tgt] &=
usr/src/uts/sun/io/scsi/adapters/fas.c
754
(void) fas_alloc_active_slots(fas, slot, KM_SLEEP);
usr/src/uts/sun/io/scsi/adapters/fas.c
7541
fas->f_neg_period[tgt] *= 2;
usr/src/uts/sun/io/scsi/adapters/fas.c
7543
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
7547
fas->f_backoff |= tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
7552
if ((fas->f_fasconf & FAS_CONF_SLOWMODE) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7553
fas->f_fasconf |= FAS_CONF_SLOWMODE;
usr/src/uts/sun/io/scsi/adapters/fas.c
7554
fas_reg_write(fas, &fas->f_reg->fas_conf, fas->f_fasconf);
usr/src/uts/sun/io/scsi/adapters/fas.c
7561
fas_force_renegotiation(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
7562
fas->f_props_update |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
7569
fas_reset_sync_wide(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
7571
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
7574
if (fas->f_wdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7576
fas->f_nowide |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
7577
fas->f_fasconf3[tgt] &= ~FAS_CONF3_WIDE;
usr/src/uts/sun/io/scsi/adapters/fas.c
7578
fas_reg_write(fas, &fas->f_reg->fas_conf3,
usr/src/uts/sun/io/scsi/adapters/fas.c
7579
fas->f_fasconf3[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7584
fas_reg_write(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
7585
(uchar_t *)&fas->f_reg->fas_sync_offset, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
7586
} else if (fas->f_sdtr_sent) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7588
fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
7590
fas->f_nosync |= (1<<tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
7591
fas->f_offset[tgt] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7592
fas->f_sync_period[tgt] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7593
fas_reg_write(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
7595
fas_reg_write(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
7597
fas->f_offset[tgt] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7598
fas->f_fasconf3[tgt] &= ~FAS_CONF3_FASTSCSI;
usr/src/uts/sun/io/scsi/adapters/fas.c
7599
fas_reg_write(fas, &fasreg->fas_conf3,
usr/src/uts/sun/io/scsi/adapters/fas.c
7600
fas->f_fasconf3[tgt]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7603
fas_force_renegotiation(fas, tgt);
usr/src/uts/sun/io/scsi/adapters/fas.c
761
fas->f_qfull_retries[i] = QFULL_RETRIES;
usr/src/uts/sun/io/scsi/adapters/fas.c
7610
fas_force_renegotiation(struct fas *fas, int target)
usr/src/uts/sun/io/scsi/adapters/fas.c
7613
fas->f_sync_known &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
7614
fas->f_sync_enabled &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
7615
fas->f_wide_known &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
7616
fas->f_wide_enabled &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
762
fas->f_qfull_retry_interval[i] =
usr/src/uts/sun/io/scsi/adapters/fas.c
7623
fas_set_wide_conf3(struct fas *fas, int target, int width)
usr/src/uts/sun/io/scsi/adapters/fas.c
7628
fas->f_fasconf3[target] &= ~FAS_CONF3_WIDE;
usr/src/uts/sun/io/scsi/adapters/fas.c
7631
fas->f_fasconf3[target] |= FAS_CONF3_WIDE;
usr/src/uts/sun/io/scsi/adapters/fas.c
7632
fas->f_wide_enabled |= (1<<target);
usr/src/uts/sun/io/scsi/adapters/fas.c
7636
fas_reg_write(fas, &fas->f_reg->fas_conf3, fas->f_fasconf3[target]);
usr/src/uts/sun/io/scsi/adapters/fas.c
7637
fas->f_fasconf3_reg_last = fas->f_fasconf3[target];
usr/src/uts/sun/io/scsi/adapters/fas.c
7648
fas_abort_curcmd(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
7650
if (fas->f_current_sp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7651
return (fas_abort_cmd(fas, fas->f_current_sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
7652
fas->f_current_sp->cmd_slot));
usr/src/uts/sun/io/scsi/adapters/fas.c
7654
return (fas_reset_bus(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
7659
fas_abort_cmd(struct fas *fas, struct fas_cmd *sp, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
7663
ap.a_hba_tran = fas->f_tran;
usr/src/uts/sun/io/scsi/adapters/fas.c
7674
if ((fas->f_current_sp && (fas->f_current_sp->cmd_slot != slot)) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
7675
(fas->f_state == STATE_FREE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7691
return (fas_reset_bus(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
770
fas_set_throttles(fas, 0, N_SLOTS, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
7707
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
7711
struct fas_cmd *cur_sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
7724
fas_move_waitQ_to_readyQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7731
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
7743
rval = fas_remove_from_readyQ(fas, sp, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7746
fas_set_pkt_reason(fas, sp, CMD_ABORTED, STAT_ABORTED);
usr/src/uts/sun/io/scsi/adapters/fas.c
7747
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7748
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
775
fas->f_props_update = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
7752
fas->f_active[slot]->f_slot[sp->cmd_tag[1]])) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7763
fas_set_throttles(fas, slot, 1, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
7785
if ((sp == cur_sp) && (fas->f_state != STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
7787
rval = fas_abort_connected_cmd(fas, sp, abort_msg);
usr/src/uts/sun/io/scsi/adapters/fas.c
7794
rval = fas_abort_disconnected_cmd(fas, ap, sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
780
fas->f_fasconf = DEFAULT_HOSTID;
usr/src/uts/sun/io/scsi/adapters/fas.c
7800
fas_set_pkt_reason(fas, sp, CMD_ABORTED, STAT_ABORTED);
usr/src/uts/sun/io/scsi/adapters/fas.c
7811
if (cur_sp && (fas->f_state != STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
7814
rval = fas_abort_connected_cmd(fas, cur_sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
7818
rval = fas_abort_disconnected_cmd(fas, ap,
usr/src/uts/sun/io/scsi/adapters/fas.c
7828
fas_remove_cmd(fas, cur_sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
7830
fas_decrement_ncmds(fas, cur_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7831
fas_call_pkt_comp(fas, cur_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7838
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
7839
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7840
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7849
fas_mark_packets(fas, slot, CMD_ABORTED, STAT_ABORTED);
usr/src/uts/sun/io/scsi/adapters/fas.c
7850
fas_flush_tagQ(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7851
fas_flush_readyQ(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
7853
fas_set_throttles(fas, slot, 1, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
7856
if (fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7857
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
7860
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
787
fas_log(fas, CE_NOTE, "?initiator SCSI ID now %d\n", id);
usr/src/uts/sun/io/scsi/adapters/fas.c
7874
fas_mark_packets(struct fas *fas, int slot, uchar_t reason, uint_t stat)
usr/src/uts/sun/io/scsi/adapters/fas.c
7876
struct fas_cmd *sp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
7879
fas_set_pkt_reason(fas, sp, reason, STAT_ABORTED);
usr/src/uts/sun/io/scsi/adapters/fas.c
788
fas->f_fasconf = (uchar_t)id;
usr/src/uts/sun/io/scsi/adapters/fas.c
7882
if (fas->f_tcmds[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7886
for (tag = 0; tag < fas->f_active[slot]->f_n_slots; tag++) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7887
if ((sp = fas->f_active[slot]->f_slot[tag]) != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7888
fas_set_pkt_reason(fas, sp, reason, stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
7892
ASSERT(fas->f_tcmds[slot] == n);
usr/src/uts/sun/io/scsi/adapters/fas.c
7900
fas_set_pkt_reason(struct fas *fas, struct fas_cmd *sp, uchar_t reason,
usr/src/uts/sun/io/scsi/adapters/fas.c
7917
fas_remove_from_readyQ(struct fas *fas, struct fas_cmd *sp, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
7925
ASSERT(fas->f_ncmds > 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
7929
for (psp = NULL, ssp = fas->f_readyf[slot]; ssp != NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
7932
if (fas->f_readyf[slot] == sp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7933
fas->f_readyf[slot] = sp->cmd_forw;
usr/src/uts/sun/io/scsi/adapters/fas.c
7937
if (fas->f_readyb[slot] == sp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7938
fas->f_readyb[slot] = psp;
usr/src/uts/sun/io/scsi/adapters/fas.c
794
fas->f_dma_attr = fas_dma_attr;
usr/src/uts/sun/io/scsi/adapters/fas.c
795
fas->f_dma_attr->dma_attr_burstsizes &=
usr/src/uts/sun/io/scsi/adapters/fas.c
7953
fas_head_of_readyQ(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
796
ddi_dma_burstsizes(fas->f_dmahandle);
usr/src/uts/sun/io/scsi/adapters/fas.c
7963
dp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
7964
fas->f_readyf[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
7966
if (fas->f_readyb[slot] == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7967
fas->f_readyb[slot] = sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
7976
fas_flush_readyQ(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
7978
if (fas->f_readyf[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
7982
ASSERT(fas->f_ncmds > 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
7984
sp = fas->f_readyf[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
7985
fas->f_readyf[slot] = fas->f_readyb[slot] = NULL;
usr/src/uts/sun/io/scsi/adapters/fas.c
799
fas->f_dma_attr->dma_attr_burstsizes &= fas_burstsizes_limit;
usr/src/uts/sun/io/scsi/adapters/fas.c
7995
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7996
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
7999
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
800
IPRINTF1("dma burstsize=%x\n", fas->f_dma_attr->dma_attr_burstsizes);
usr/src/uts/sun/io/scsi/adapters/fas.c
8008
fas_flush_tagQ(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
8012
struct f_slots *tagque = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
8019
slot, fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8024
for (tag = 0; tag < fas->f_active[slot]->f_n_slots; tag++) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8036
ASSERT(fas->f_tcmds[slot] == n);
usr/src/uts/sun/io/scsi/adapters/fas.c
8039
tag = starttag = fas->f_active[slot]->f_tags;
usr/src/uts/sun/io/scsi/adapters/fas.c
8043
fas_flush_cmd(fas, sp, 0, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
8046
(ushort_t)fas->f_active[slot]->f_n_slots;
usr/src/uts/sun/io/scsi/adapters/fas.c
8049
ASSERT(fas->f_tcmds[slot] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
805
if (scsi_hba_attach_setup(dip, fas->f_dma_attr, tran, 0) !=
usr/src/uts/sun/io/scsi/adapters/fas.c
8050
EPRINTF2("ncmds = %x, ndisc=%x\n", fas->f_ncmds, fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
8051
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8058
fas_flush_cmd(struct fas *fas, struct fas_cmd *sp, uchar_t reason,
usr/src/uts/sun/io/scsi/adapters/fas.c
8063
ASSERT(fas->f_ncmds > 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
8065
ASSERT(sp == fas->f_active[slot]->f_slot[sp->cmd_tag[1]]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8067
fas_remove_cmd(fas, sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
8068
fas_decrement_ncmds(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8069
fas_set_pkt_reason(fas, sp, reason, stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
807
fas_log(fas, CE_WARN, "scsi_hba_attach_setup failed");
usr/src/uts/sun/io/scsi/adapters/fas.c
8070
fas_call_pkt_comp(fas, sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8072
EPRINTF2("ncmds = %x, ndisc=%x\n", fas->f_ncmds, fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
8073
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8115
fas_do_proxy_cmd(struct fas *fas, struct fas_cmd *sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
8122
if (fas_accept_pkt(fas, sp, TRAN_BUSY_OK) == TRAN_ACCEPT &&
usr/src/uts/sun/io/scsi/adapters/fas.c
8127
ASSERT(fas->f_current_sp != sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8134
ASSERT(fas->f_current_sp != sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8145
fas_abort_connected_cmd(struct fas *fas, struct fas_cmd *sp, uchar_t msg)
usr/src/uts/sun/io/scsi/adapters/fas.c
815
fas->f_scsi_options = ddi_prop_get_int(DDI_DEV_T_ANY,
usr/src/uts/sun/io/scsi/adapters/fas.c
8153
if (fas->f_reset_delay[Tgt(sp)]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8160
if (!((fas->f_state == ACTS_DATA) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
8161
(fas->f_state == ACTS_DATA_DONE))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8170
fas->f_abort_msg_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8171
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
8172
fas->f_cur_msgout[0] = msg;
usr/src/uts/sun/io/scsi/adapters/fas.c
8174
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8176
(void) fas_dopoll(fas, SHORT_POLL_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
8183
if (fas->f_abort_msg_sent && (sp->cmd_flags & CFLAG_COMPLETED)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8192
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8201
fas_abort_disconnected_cmd(struct fas *fas, struct scsi_address *ap,
usr/src/uts/sun/io/scsi/adapters/fas.c
8214
if (fas->f_reset_delay[target] != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8226
ASSERT(sp == fas->f_active[slot]->f_slot[tag]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8233
rval = fas_do_proxy_cmd(fas, proxy_cmdp, ap, scsi_mname(msg));
usr/src/uts/sun/io/scsi/adapters/fas.c
8246
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
8249
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
8251
slot, level, fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8253
fas_move_waitQ_to_readyQ(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8259
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8266
if (fas_dopoll(fas, SHORT_POLL_TIMEOUT) <= 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8270
fas_internal_reset(fas, FAS_RESET_FAS);
usr/src/uts/sun/io/scsi/adapters/fas.c
8271
(void) fas_reset_bus(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8272
if (fas_dopoll(fas, SHORT_POLL_TIMEOUT) <= 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8273
fas_log(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
8275
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8284
struct fas_cmd *cur_sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
8290
fas_set_all_lun_throttles(fas, slot, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8304
if (cur_sp && (fas->f_state != STATE_FREE) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
8307
rval = fas_reset_connected_cmd(fas, ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
8315
rval = fas_reset_disconnected_cmd(fas, ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
832
fas->f_hm_rev = 0x20;
usr/src/uts/sun/io/scsi/adapters/fas.c
8326
fas_set_pkt_reason(fas, cur_sp,
usr/src/uts/sun/io/scsi/adapters/fas.c
8329
fas_remove_cmd(fas, cur_sp, NEW_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
833
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
8331
fas_decrement_ncmds(fas, cur_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8332
fas_call_pkt_comp(fas, cur_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
8337
fas_reset_cleanup(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
8348
fas_set_all_lun_throttles(fas, slot, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8352
if (fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8353
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8357
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
8358
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
837
fas->f_hm_rev = 0x10;
usr/src/uts/sun/io/scsi/adapters/fas.c
8373
fas_start_watch_reset_delay(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
838
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
8380
ASSERT((fas_reset_watch != 0) || (fas->f_flags & FAS_FLG_NOTIMEOUTS));
usr/src/uts/sun/io/scsi/adapters/fas.c
8388
fas_setup_reset_delay(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
8393
fas_set_throttles(fas, 0, N_SLOTS, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8395
fas->f_reset_delay[i] = fas->f_scsi_reset_delay;
usr/src/uts/sun/io/scsi/adapters/fas.c
8397
fas_start_watch_reset_delay(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8399
drv_usecwait(fas->f_scsi_reset_delay * 1000);
usr/src/uts/sun/io/scsi/adapters/fas.c
8411
struct fas *fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
8412
struct fas *lfas; /* last not_done fas */
usr/src/uts/sun/io/scsi/adapters/fas.c
8420
for (fas = fas_head; fas != (struct fas *)NULL; fas = fas->f_next) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8421
if (fas->f_tran == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8424
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
8425
not_done += fas_watch_reset_delay_subr(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8426
lfas = fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
8427
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
843
fas->f_hm_rev = 0x21;
usr/src/uts/sun/io/scsi/adapters/fas.c
8437
fas_watch_reset_delay_subr(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
844
fas_log(fas, CE_WARN, "obsolete rev 2.1 FEPS chip");
usr/src/uts/sun/io/scsi/adapters/fas.c
8450
if (fas->f_reset_delay[s] != 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8452
fas->f_reset_delay[s]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8453
fas->f_reset_delay[s] -= FAS_WATCH_RESET_DELAY_TICK;
usr/src/uts/sun/io/scsi/adapters/fas.c
8454
if (fas->f_reset_delay[s] <= 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8458
fas->f_reset_delay[s] = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8459
fas_set_all_lun_throttles(fas,
usr/src/uts/sun/io/scsi/adapters/fas.c
846
fas->f_hm_rev = (uchar_t)hm_rev;
usr/src/uts/sun/io/scsi/adapters/fas.c
847
fas_log(fas, CE_NOTE, "?rev %x.%x FEPS chip\n",
usr/src/uts/sun/io/scsi/adapters/fas.c
8475
if (start_slot != -1 && fas->f_state == STATE_FREE) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8476
(void) fas_ustart(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8485
fas_reset_cleanup(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
8497
slot, start, end, fas->f_tcmds[slot]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8499
ASSERT(!(fas->f_current_sp &&
usr/src/uts/sun/io/scsi/adapters/fas.c
8500
(fas->f_current_sp->cmd_slot == slot) &&
usr/src/uts/sun/io/scsi/adapters/fas.c
8501
(fas->f_state & STATE_SELECTING)));
usr/src/uts/sun/io/scsi/adapters/fas.c
8508
fas_set_all_lun_throttles(fas, start, HOLD_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8509
fas->f_reset_delay[target] = fas->f_scsi_reset_delay;
usr/src/uts/sun/io/scsi/adapters/fas.c
851
if ((fas->f_scsi_options & SCSI_OPTIONS_SYNC) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8510
fas_start_watch_reset_delay(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8512
drv_usecwait(fas->f_scsi_reset_delay * 1000);
usr/src/uts/sun/io/scsi/adapters/fas.c
8516
fas_mark_packets(fas, i, CMD_RESET, STAT_DEV_RESET);
usr/src/uts/sun/io/scsi/adapters/fas.c
8517
fas_flush_tagQ(fas, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
8518
fas_flush_readyQ(fas, i);
usr/src/uts/sun/io/scsi/adapters/fas.c
8519
if (fas->f_arq_pkt[i]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
852
fas->f_nosync = ALL_TARGETS;
usr/src/uts/sun/io/scsi/adapters/fas.c
8520
struct fas_cmd *sp = fas->f_arq_pkt[i];
usr/src/uts/sun/io/scsi/adapters/fas.c
8528
ASSERT(fas->f_tcmds[i] == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
8530
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
8532
fas_force_renegotiation(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
8539
fas_reset_disconnected_cmd(struct fas *fas, struct scsi_address *ap)
usr/src/uts/sun/io/scsi/adapters/fas.c
8548
rval = fas_do_proxy_cmd(fas, sp, ap, scsi_mname(MSG_DEVICE_RESET));
usr/src/uts/sun/io/scsi/adapters/fas.c
855
if ((fas->f_scsi_options & SCSI_OPTIONS_WIDE) == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8559
fas_reset_connected_cmd(struct fas *fas, struct scsi_address *ap)
usr/src/uts/sun/io/scsi/adapters/fas.c
856
fas->f_nowide = ALL_TARGETS;
usr/src/uts/sun/io/scsi/adapters/fas.c
8562
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
8569
if (!((fas->f_state == ACTS_DATA) ||
usr/src/uts/sun/io/scsi/adapters/fas.c
8570
(fas->f_state == ACTS_DATA_DONE))) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8576
fas->f_reset_msg_sent = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8577
fas->f_omsglen = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
8578
fas->f_cur_msgout[0] = MSG_DEVICE_RESET;
usr/src/uts/sun/io/scsi/adapters/fas.c
8581
fas_assert_atn(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8586
(void) fas_dopoll(fas, SHORT_POLL_TIMEOUT);
usr/src/uts/sun/io/scsi/adapters/fas.c
8593
if (fas->f_reset_msg_sent && (sp->cmd_flags & CFLAG_COMPLETED)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8601
fas->f_omsglen = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8610
fas_reset_bus(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
8613
New_state(fas, ACTS_RESET);
usr/src/uts/sun/io/scsi/adapters/fas.c
8615
fas_internal_reset(fas, FAS_RESET_SCSIBUS);
usr/src/uts/sun/io/scsi/adapters/fas.c
8629
fas_reset_recovery(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas.c
8637
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8642
fas->f_sync_known = fas->f_wide_known = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8647
FAS_FLUSH_DMA_HARD(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
865
fas->f_target_scsi_options[i] = ddi_prop_get_int(
usr/src/uts/sun/io/scsi/adapters/fas.c
8652
fas_setup_reset_delay(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8657
while (INTPENDING(fas) && (max_loop < FAS_RESET_SPIN_MAX_LOOP)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8658
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
8659
fas->f_stat = fas_reg_read(fas, &fasreg->fas_stat);
usr/src/uts/sun/io/scsi/adapters/fas.c
8660
fas->f_stat2 = fas_reg_read(fas, &fasreg->fas_stat2);
usr/src/uts/sun/io/scsi/adapters/fas.c
8661
fas->f_step = fas_reg_read(fas, &fasreg->fas_step);
usr/src/uts/sun/io/scsi/adapters/fas.c
8662
fas->f_intr = fas_reg_read(fas, &fasreg->fas_intr);
usr/src/uts/sun/io/scsi/adapters/fas.c
8668
fas_log(fas, CE_WARN, "Resetting SCSI bus failed");
usr/src/uts/sun/io/scsi/adapters/fas.c
8671
fas_reg_cmd_write(fas, CMD_FLUSH);
usr/src/uts/sun/io/scsi/adapters/fas.c
8677
fas_internal_reset(fas, FAS_RESET_FAS);
usr/src/uts/sun/io/scsi/adapters/fas.c
868
if (fas->f_target_scsi_options[i] != -1) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8682
if (fas->f_state != ACTS_RESET) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8683
if (fas->f_ncmds) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8684
fas_log(fas, CE_WARN, "external SCSI bus reset");
usr/src/uts/sun/io/scsi/adapters/fas.c
8688
if (fas->f_ncmds == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
869
fas_log(fas, CE_NOTE, "?target%x-scsi-options=0x%x\n",
usr/src/uts/sun/io/scsi/adapters/fas.c
8696
fas_internal_reset(fas, FAS_RESET_SOFTC);
usr/src/uts/sun/io/scsi/adapters/fas.c
870
i, fas->f_target_scsi_options[i]);
usr/src/uts/sun/io/scsi/adapters/fas.c
8701
New_state(fas, ACTS_FROZEN);
usr/src/uts/sun/io/scsi/adapters/fas.c
8709
start_slot = fas->f_next_slot;
usr/src/uts/sun/io/scsi/adapters/fas.c
871
fas->f_target_scsi_options_defined |= 1 << i;
usr/src/uts/sun/io/scsi/adapters/fas.c
8712
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
8713
fas_mark_packets(fas, slot, CMD_RESET, STAT_BUS_RESET);
usr/src/uts/sun/io/scsi/adapters/fas.c
8714
fas_flush_tagQ(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
8715
fas_flush_readyQ(fas, slot);
usr/src/uts/sun/io/scsi/adapters/fas.c
8716
if (fas->f_arq_pkt[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8717
struct fas_cmd *sp = fas->f_arq_pkt[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
8725
slot = NEXTSLOT(slot, fas->f_dslot);
usr/src/uts/sun/io/scsi/adapters/fas.c
8728
fas_check_ncmds(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
873
fas->f_target_scsi_options[i] = fas->f_scsi_options;
usr/src/uts/sun/io/scsi/adapters/fas.c
8734
if (fas->f_active[i]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8735
fas->f_active[i]->f_timebase = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8736
fas->f_active[i]->f_timeout = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8737
fas->f_active[i]->f_dups = 0;
usr/src/uts/sun/io/scsi/adapters/fas.c
8745
New_state(fas, STATE_FREE);
usr/src/uts/sun/io/scsi/adapters/fas.c
8746
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas.c
875
if (((fas->f_target_scsi_options[i] &
usr/src/uts/sun/io/scsi/adapters/fas.c
8751
(void) scsi_hba_reset_notify_callback(&fas->f_mutex,
usr/src/uts/sun/io/scsi/adapters/fas.c
8752
&fas->f_reset_notify_listf);
usr/src/uts/sun/io/scsi/adapters/fas.c
8767
struct fas *fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
877
(fas->f_target_scsi_options[i] & SCSI_OPTIONS_TAG)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8771
if ((tran == NULL) || ((fas = TRAN2FAS(tran)) == NULL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8775
return (fas_quiesce_bus(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
878
fas->f_target_scsi_options[i] &= ~SCSI_OPTIONS_TAG;
usr/src/uts/sun/io/scsi/adapters/fas.c
8781
struct fas *fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
8785
if ((tran == NULL) || ((fas = TRAN2FAS(tran)) == NULL)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8789
return (fas_unquiesce_bus(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
879
fas_log(fas, CE_WARN,
usr/src/uts/sun/io/scsi/adapters/fas.c
8797
fas_test_reset(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
8803
ap.a_hba_tran = fas->f_tran;
usr/src/uts/sun/io/scsi/adapters/fas.c
8807
(fas->f_state == ACTS_DATA_DONE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8812
(fas->f_state == ACTS_DATA_DONE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8825
fas_test_abort(struct fas *fas, int slot)
usr/src/uts/sun/io/scsi/adapters/fas.c
8827
struct fas_cmd *sp = fas->f_current_sp;
usr/src/uts/sun/io/scsi/adapters/fas.c
8833
ap.a_hba_tran = fas->f_tran;
usr/src/uts/sun/io/scsi/adapters/fas.c
884
fas->f_scsi_tag_age_limit =
usr/src/uts/sun/io/scsi/adapters/fas.c
8842
sp = fas->f_active[slot]->f_slot[0];
usr/src/uts/sun/io/scsi/adapters/fas.c
8848
(fas->f_tcmds[slot] != 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8854
if ((sp = fas->f_active[slot]->f_slot[tag])
usr/src/uts/sun/io/scsi/adapters/fas.c
8865
(fas->f_tcmds[slot] != 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8869
} else if (fas_atest_disc == 3 && fas->f_readyf[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8870
pkt = fas->f_readyf[slot]->cmd_pkt;
usr/src/uts/sun/io/scsi/adapters/fas.c
8872
fas->f_readyf[slot] && fas->f_readyf[slot]->cmd_forw) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8873
pkt = fas->f_readyf[slot]->cmd_forw->cmd_pkt;
usr/src/uts/sun/io/scsi/adapters/fas.c
8874
} else if (fas_atest_disc == 5 && fas->f_readyb[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8875
pkt = fas->f_readyb[slot]->cmd_pkt;
usr/src/uts/sun/io/scsi/adapters/fas.c
8878
(fas->f_state == ACTS_DATA_DONE)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
888
fas->f_scsi_reset_delay = ddi_prop_get_int(DDI_DEV_T_ANY,
usr/src/uts/sun/io/scsi/adapters/fas.c
8894
fas_log(fas, CE_NOTE, "aborting pkt=0x%p state=%x\n",
usr/src/uts/sun/io/scsi/adapters/fas.c
890
if (fas->f_scsi_reset_delay == 0) {
usr/src/uts/sun/io/scsi/adapters/fas.c
891
fas_log(fas, CE_NOTE,
usr/src/uts/sun/io/scsi/adapters/fas.c
8910
struct fas *fas = ADDR2FAS(ap);
usr/src/uts/sun/io/scsi/adapters/fas.c
8917
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
894
fas->f_scsi_reset_delay = SCSI_DEFAULT_RESET_DELAY;
usr/src/uts/sun/io/scsi/adapters/fas.c
8950
fas->f_target_scsi_options[ap->a_target] |=
usr/src/uts/sun/io/scsi/adapters/fas.c
8953
fas->f_target_scsi_options[ap->a_target] &=
usr/src/uts/sun/io/scsi/adapters/fas.c
8960
fas->f_force_async &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
8962
fas->f_force_async |= tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
8964
fas_force_renegotiation(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
8971
ushort_t old_notag = fas->f_notag;
usr/src/uts/sun/io/scsi/adapters/fas.c
8974
if (fas->f_tcmds[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
8981
if (fas->f_target_scsi_options[target] &
usr/src/uts/sun/io/scsi/adapters/fas.c
8985
fas->f_notag &= ntshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
8992
fas->f_notag |= tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
8995
if (val && fas_alloc_active_slots(fas, slot,
usr/src/uts/sun/io/scsi/adapters/fas.c
8997
fas->f_notag = old_notag;
usr/src/uts/sun/io/scsi/adapters/fas.c
900
if (ddi_get_iblock_cookie(dip, (uint_t)0, &fas->f_iblock)
usr/src/uts/sun/io/scsi/adapters/fas.c
9001
fas_set_all_lun_throttles(fas, slot, MAX_THROTTLE);
usr/src/uts/sun/io/scsi/adapters/fas.c
9003
fas_update_props(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
9010
if (fas->f_target_scsi_options[target] &
usr/src/uts/sun/io/scsi/adapters/fas.c
9012
fas->f_nowide &= ntshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
9013
fas->f_force_narrow &= ~tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
9018
fas->f_force_narrow |= tshift;
usr/src/uts/sun/io/scsi/adapters/fas.c
9020
fas_force_renegotiation(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
9026
if (fas_create_arq_pkt(fas, ap)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9030
if (fas_delete_arq_pkt(fas, ap)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9038
fas->f_qfull_retries[target] = (uchar_t)val;
usr/src/uts/sun/io/scsi/adapters/fas.c
9043
fas->f_qfull_retry_interval[target] =
usr/src/uts/sun/io/scsi/adapters/fas.c
906
mutex_init(&fas->f_mutex, NULL, MUTEX_DRIVER, fas->f_iblock);
usr/src/uts/sun/io/scsi/adapters/fas.c
9066
(fas->f_target_scsi_options[target] &
usr/src/uts/sun/io/scsi/adapters/fas.c
907
cv_init(&fas->f_cv, NULL, CV_DRIVER, NULL);
usr/src/uts/sun/io/scsi/adapters/fas.c
9072
if (tgtonly && fas->f_offset[target]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9080
rval = MY_ID(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
9083
if (tgtonly && ((fas->f_notag & tshift) == 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9088
if ((tgtonly && (fas->f_nowide & tshift) == 0)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9096
if (tgtonly && fas->f_arq_pkt[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9106
rval = fas->f_qfull_retries[target];
usr/src/uts/sun/io/scsi/adapters/fas.c
9110
fas->f_qfull_retry_interval[target]) /
usr/src/uts/sun/io/scsi/adapters/fas.c
912
mutex_init(&fas->f_waitQ_mutex, NULL, MUTEX_DRIVER, fas->f_iblock);
usr/src/uts/sun/io/scsi/adapters/fas.c
9121
fas_update_props(fas, target);
usr/src/uts/sun/io/scsi/adapters/fas.c
9123
fas_check_waitQ_and_mutex_exit(fas);
usr/src/uts/sun/io/scsi/adapters/fas.c
9139
fas_update_props(struct fas *fas, int tgt)
usr/src/uts/sun/io/scsi/adapters/fas.c
9145
uint_t regval = fas->f_sync_period[tgt];
usr/src/uts/sun/io/scsi/adapters/fas.c
9146
int offset = fas->f_offset[tgt];
usr/src/uts/sun/io/scsi/adapters/fas.c
9148
wide_enabled = ((fas->f_nowide & (1<<tgt)) == 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
9151
FAS_SYNC_KBPS((regval * fas->f_clock_cycle) / 1000);
usr/src/uts/sun/io/scsi/adapters/fas.c
9155
fas_update_this_prop(fas, property, xfer_rate);
usr/src/uts/sun/io/scsi/adapters/fas.c
9158
fas_update_this_prop(fas, property, wide_enabled);
usr/src/uts/sun/io/scsi/adapters/fas.c
9161
tq_enabled = ((fas->f_notag & (1<<tgt))? 0 : 1);
usr/src/uts/sun/io/scsi/adapters/fas.c
9162
fas_update_this_prop(fas, property, tq_enabled);
usr/src/uts/sun/io/scsi/adapters/fas.c
9167
fas_update_this_prop(struct fas *fas, char *property, int value)
usr/src/uts/sun/io/scsi/adapters/fas.c
9169
dev_info_t *dip = fas->f_dev;
usr/src/uts/sun/io/scsi/adapters/fas.c
9172
ASSERT(mutex_owned(FAS_MUTEX(fas)));
usr/src/uts/sun/io/scsi/adapters/fas.c
9177
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
9182
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
9189
fas_alloc_active_slots(struct fas *fas, int slot, int flag)
usr/src/uts/sun/io/scsi/adapters/fas.c
919
if (fas_init_callbacks(fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9192
struct f_slots *old_active = fas->f_active[slot];
usr/src/uts/sun/io/scsi/adapters/fas.c
9197
if (fas->f_tcmds[slot]) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9212
fas->f_active[slot] = new_active;
usr/src/uts/sun/io/scsi/adapters/fas.c
9213
fas->f_active[slot]->f_n_slots = (NOTAG(target) ? 1 : NTAGS);
usr/src/uts/sun/io/scsi/adapters/fas.c
9214
fas->f_active[slot]->f_size = size;
usr/src/uts/sun/io/scsi/adapters/fas.c
9219
fas->f_active[slot]->f_tags = 1;
usr/src/uts/sun/io/scsi/adapters/fas.c
9236
fas_log(struct fas *fas, int level, const char *fmt, ...)
usr/src/uts/sun/io/scsi/adapters/fas.c
9241
if (fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9242
dev = fas->f_dev;
usr/src/uts/sun/io/scsi/adapters/fas.c
9264
fas_printf(struct fas *fas, const char *fmt, ...)
usr/src/uts/sun/io/scsi/adapters/fas.c
9276
if (fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9277
dev = fas->f_dev;
usr/src/uts/sun/io/scsi/adapters/fas.c
929
fas->f_intr_kstat = kstat_create("fas", instance, buf, "controller", \
usr/src/uts/sun/io/scsi/adapters/fas.c
9290
fas_dprintf(struct fas *fas, const char *fmt, ...)
usr/src/uts/sun/io/scsi/adapters/fas.c
9295
if (fas) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9296
dev = fas->f_dev;
usr/src/uts/sun/io/scsi/adapters/fas.c
931
if (fas->f_intr_kstat)
usr/src/uts/sun/io/scsi/adapters/fas.c
9313
fas_printstate(struct fas *fas, char *msg)
usr/src/uts/sun/io/scsi/adapters/fas.c
9315
volatile struct fasreg *fasreg = fas->f_reg;
usr/src/uts/sun/io/scsi/adapters/fas.c
9316
volatile struct dma *dmar = fas->f_dma;
usr/src/uts/sun/io/scsi/adapters/fas.c
9317
uint_t csr = fas_dma_reg_read(fas, &dmar->dma_csr);
usr/src/uts/sun/io/scsi/adapters/fas.c
9318
uint_t count = fas_dma_reg_read(fas, &dmar->dma_count);
usr/src/uts/sun/io/scsi/adapters/fas.c
9319
uint_t addr = fas_dma_reg_read(fas, &dmar->dma_addr);
usr/src/uts/sun/io/scsi/adapters/fas.c
932
kstat_install(fas->f_intr_kstat);
usr/src/uts/sun/io/scsi/adapters/fas.c
9320
uint_t test = fas_dma_reg_read(fas, &dmar->dma_test);
usr/src/uts/sun/io/scsi/adapters/fas.c
9323
fas_log(fas, CE_WARN, "%s: current fas state:", msg);
usr/src/uts/sun/io/scsi/adapters/fas.c
9325
fas->f_stat, FAS_STAT_BITS, fas->f_intr, FAS_INT_BITS);
usr/src/uts/sun/io/scsi/adapters/fas.c
9327
scsi_mname(fas->f_last_msgout), scsi_mname(fas->f_last_msgin));
usr/src/uts/sun/io/scsi/adapters/fas.c
9331
addr, count, test, fas->f_lastdma, fas->f_lastcount);
usr/src/uts/sun/io/scsi/adapters/fas.c
9343
if (fas->f_current_sp) {
usr/src/uts/sun/io/scsi/adapters/fas.c
9344
fas_dump_cmd(fas, fas->f_current_sp);
usr/src/uts/sun/io/scsi/adapters/fas.c
9352
fas_dump_cmd(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
9368
fas_state_name(fas->f_state), fas_state_name(fas->f_laststate));
usr/src/uts/sun/io/scsi/adapters/fas.c
937
mutex_enter(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
938
if (ddi_add_intr(dip, (uint_t)0, &fas->f_iblock, NULL,
usr/src/uts/sun/io/scsi/adapters/fas.c
9380
fas_short_dump_cmd(struct fas *fas, struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas.c
939
fas_intr, (caddr_t)fas)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
941
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
949
if (fas_init_chip(fas, id)) {
usr/src/uts/sun/io/scsi/adapters/fas.c
951
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
954
mutex_exit(FAS_MUTEX(fas));
usr/src/uts/sun/io/scsi/adapters/fas.c
960
fas->f_kmem_cache = kmem_cache_create(buf,
usr/src/uts/sun/io/scsi/adapters/fas.c
963
NULL, (void *)fas, NULL, 0);
usr/src/uts/sun/io/scsi/adapters/fas.c
964
if (fas->f_kmem_cache == NULL) {
usr/src/uts/sun/io/scsi/adapters/fas.c
978
fas_head = fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
980
fas_tail->f_next = fas;
usr/src/uts/sun/io/scsi/adapters/fas.c
982
fas_tail = fas; /* point to last fas in list */
usr/src/uts/sun/io/scsi/adapters/fas.c
994
fas_log(fas, CE_NOTE, "?scsi-watchdog-tick=%d\n",
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
102
fas->f_c_in_callback = 0;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
104
mutex_exit(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
122
fas_call_pkt_comp(register struct fas *fas, register struct fas_cmd *sp)
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
131
ASSERT(fas->f_ncmds >= fas->f_ndisc);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
133
ASSERT(sp != fas->f_current_sp);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
134
ASSERT(sp != fas->f_active[sp->cmd_slot]->f_slot[sp->cmd_tag[1]]);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
161
mutex_enter(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
162
if (fas->f_c_qf) {
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
166
register struct fas_cmd *dp = fas->f_c_qb;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
168
fas->f_c_qb = sp;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
175
fas->f_c_qf = fas->f_c_qb = sp;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
178
mutex_exit(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
46
void fas_call_pkt_comp(register struct fas *fas,
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
48
void fas_empty_callbackQ(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
49
int fas_init_callbacks(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
50
void fas_destroy_callbacks(struct fas *fas);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
51
void fas_printf(struct fas *fas, const char *fmt, ...);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
54
fas_init_callbacks(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
56
mutex_init(&fas->f_c_mutex, NULL, MUTEX_DRIVER, fas->f_iblock);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
62
fas_destroy_callbacks(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
64
mutex_destroy(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
68
fas_empty_callbackQ(struct fas *fas)
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
75
mutex_enter(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
82
if (fas->f_c_in_callback) {
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
85
fas->f_c_in_callback = 1;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
87
while (fas->f_c_qf) {
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
88
register struct fas_cmd *qf = fas->f_c_qf;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
90
fas->f_c_qf = fas->f_c_qb = NULL;
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
91
mutex_exit(&fas->f_c_mutex);
usr/src/uts/sun/io/scsi/adapters/fas_callbacks.c
99
mutex_enter(&fas->f_c_mutex);
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
300
fas_reg_write(fas, &fasreg->fas_xcnt_lo, (uint8_t)val); \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
301
fas_reg_write(fas, &fasreg->fas_xcnt_mid, \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
303
fas_reg_write(fas, &fasreg->fas_recmd_lo, \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
305
fas_reg_write(fas, &fasreg->fas_recmd_hi, 0); \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
313
lo = fas_reg_read(fas, &fasreg->fas_xcnt_lo); \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
314
mid = fas_reg_read(fas, &fasreg->fas_xcnt_mid); \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
315
r_lo = fas_reg_read(fas, &fasreg->fas_recmd_lo); \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
358
#define FAS_CLOCK_TICK(fas) \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
359
((uint_t)FAS_CLOCK_DELAY * (uint_t)(fas)->f_clock_conv * \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
360
(uint_t)(fas)->f_clock_cycle) / (uint_t)1000
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
368
#define MIN_SYNC_FAST(fas) 4
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
369
#define MIN_SYNC_SLOW(fas) \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
370
(((fas)->e_fasconf & FAS_CONF_SLOWMODE) ? 6 : 5)
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
371
#define MIN_SYNC(fas) (MIN_SYNC_FAST((fas)))
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
372
#define MAX_SYNC(fas) 35
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
378
#define MIN_SYNC_TIME(fas) \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
379
((uint_t)MIN_SYNC((fas)) * (uint_t)((fas)->f_clock_cycle)) / \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
381
#define MAX_SYNC_TIME(fas) \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
382
((uint_t)MAX_SYNC((fas)) * (uint_t)((fas)->f_clock_cycle)) / \
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
390
#define MIN_SYNC_PERIOD(fas) (CONVERT_PERIOD(MIN_SYNC_TIME((fas))))
usr/src/uts/sun/sys/scsi/adapters/fasreg.h
391
#define MAX_SYNC_PERIOD(fas) (CONVERT_PERIOD(MAX_SYNC_TIME((fas))))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
127
struct fas *f_next;
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
492
_NOTE(MUTEX_PROTECTS_DATA(fas::f_mutex, fas))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
493
_NOTE(MUTEX_PROTECTS_DATA(fas::f_waitQ_mutex, fas::f_waitf fas::f_waitb))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
494
_NOTE(MUTEX_PROTECTS_DATA(fas::f_c_mutex, fas::f_c_qf fas::f_c_qb
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
495
fas::f_c_in_callback))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
496
_NOTE(DATA_READABLE_WITHOUT_LOCK(fas::f_flags))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
501
_NOTE(SCHEME_PROTECTS_DATA("safe sharing", fas::f_next fas::f_state))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
503
fas::f_dma fas::f_dma_attr fas::f_hm_rev))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
505
fas::f_target_scsi_options fas::f_scsi_options))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
506
_NOTE(SCHEME_PROTECTS_DATA("stable data", fas::f_instance))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
508
fas::f_reg_trace_index fas::f_reg_trace))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
509
_NOTE(SCHEME_PROTECTS_DATA("protected by kmem lock", fas::f_kmem_cache))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
511
fas::f_notag fas::f_suspended fas::f_ndisc))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
512
_NOTE(SCHEME_PROTECTS_DATA("stable data", fas::f_dev fas::f_tran))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
513
_NOTE(SCHEME_PROTECTS_DATA("only debugging", fas::f_reg_dma_reads))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
514
_NOTE(SCHEME_PROTECTS_DATA("safe sharing", fas::f_quiesce_timeid))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
520
#define FAS_KSTAT_INTR(fas) KSTAT_INTR_PTR(fas->f_intr_kstat)->\
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
535
#define FAS_CAN_SCHED ((fas->f_flags & FAS_FLG_NOTIMEOUTS) == 0)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
56
#define FAS_MUTEX(fas) (&(fas)->f_mutex)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
57
#define FAS_CV(fas) (&(fas)->f_cv)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
736
extern void fas_dprintf(struct fas *fas, const char *fmt, ...)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
741
((fas->f_instance == fasdebug_instance) || \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
744
((fas->f_instance == fasdebug_instance) || \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
748
((fas->f_instance == fasdebug_instance) || \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
751
#define EPRINTF(str) if (EDEBUGGING) fas_dprintf(fas, str)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
752
#define EPRINTF1(str, a) if (EDEBUGGING) fas_dprintf(fas, str, a)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
753
#define EPRINTF2(str, a, b) if (EDEBUGGING) fas_dprintf(fas, str, a, b)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
754
#define EPRINTF3(str, a, b, c) if (EDEBUGGING) fas_dprintf(fas, str, a, b, c)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
756
if (EDEBUGGING) fas_dprintf(fas, str, a, b, c, d)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
758
if (EDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
760
if (EDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e, f)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
762
#define DPRINTF(str) if (DDEBUGGING) fas_dprintf(fas, str)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
763
#define DPRINTF1(str, a) if (DDEBUGGING) fas_dprintf(fas, str, a)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
764
#define DPRINTF2(str, a, b) if (DDEBUGGING) fas_dprintf(fas, str, a, b)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
765
#define DPRINTF3(str, a, b, c) if (DDEBUGGING) fas_dprintf(fas, str, a, b, c)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
767
if (DDEBUGGING) fas_dprintf(fas, str, a, b, c, d)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
769
if (DDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
771
if (DDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e, f)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
773
#define IPRINTF(str) if (IDEBUGGING) fas_dprintf(fas, str)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
774
#define IPRINTF1(str, a) if (IDEBUGGING) fas_dprintf(fas, str, a)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
775
#define IPRINTF2(str, a, b) if (IDEBUGGING) fas_dprintf(fas, str, a, b)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
776
#define IPRINTF3(str, a, b, c) if (IDEBUGGING) fas_dprintf(fas, str, a, b, c)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
778
if (IDEBUGGING) fas_dprintf(fas, str, a, b, c, d)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
780
if (IDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
782
if (IDEBUGGING) fas_dprintf(fas, str, a, b, c, d, e, f)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
824
#define NODISC(tgt) (fas->f_nodisc & (1<<(tgt)))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
825
#define NOTAG(tgt) (fas->f_notag & (1<<(tgt)))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
826
#define TAGGED(tgt) ((fas->f_notag & (1<<(tgt))) == 0)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
827
#define SYNC_KNOWN(tgt) (fas->f_sync_known & (1<<(tgt)))
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
830
#define MY_ID(fas) ((fas)->f_fasconf & FAS_CONF_BUSID)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
831
#define INTPENDING(fas) (fas_dma_reg_read((fas), \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
832
&((fas)->f_dma->dma_csr))&DMA_INT_MASK)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
837
#define New_state(fas, state)\
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
838
(fas)->f_laststate = (fas)->f_state, (fas)->f_state = (state)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
840
#define CNUM (fas->f_instance)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
856
#define FAS_HM_REV(fas) (fas)->f_hm_rev
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
875
#define FAS_EMPTY_CALLBACKQ(fas) fas_empty_callbackQ(fas)
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
877
#define FAS_CHECK_WAITQ_AND_FAS_MUTEX_EXIT(fas) \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
878
mutex_enter(&fas->f_waitQ_mutex); \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
879
if (fas->f_waitf) { \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
880
fas_empty_waitQ(fas); \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
882
mutex_exit(FAS_MUTEX(fas)); \
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
883
mutex_exit(&fas->f_waitQ_mutex);
usr/src/uts/sun/sys/scsi/adapters/fasvar.h
90
#define TRAN2FAS(tran) ((struct fas *)(tran)->tran_hba_private)