Lines Matching +full:cfg +full:-

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
51 * SAF-TE Type Device Emulation
59 * SAF-TE specific defines- Mandatory ones only...
63 * READ BUFFER ('get' commands) IDs- placed in offset 2 of cdb
71 * WRITE BUFFER ('set' commands) IDs- placed in offset 0 of databuf
159 SES_SETSTATUS_ENC_IDX = -1
169 req->result = result; in safte_terminate_control_requests()
195 #define SAFT_ALARM_OFFSET(cc) (cc)->slotoff - 1
228 &emulate_array_devices, 0, "Emulate Array Devices for SAF-TE");
235 if (state->page_code != SAFTE_RD_RDCFG && in safte_fill_read_buf_io()
236 enc->enc_cache.nelms == 0) { in safte_fill_read_buf_io()
238 return (-1); in safte_fill_read_buf_io()
241 if (enc->enc_type == ENC_SEMB_SAFT) { in safte_fill_read_buf_io()
242 semb_read_buffer(&ccb->ataio, /*retries*/5, in safte_fill_read_buf_io()
244 state->page_code, buf, state->buf_size, in safte_fill_read_buf_io()
245 state->timeout); in safte_fill_read_buf_io()
247 scsi_read_buffer(&ccb->csio, /*retries*/5, in safte_fill_read_buf_io()
249 state->page_code, 0, buf, state->buf_size, in safte_fill_read_buf_io()
250 SSD_FULL_SIZE, state->timeout); in safte_fill_read_buf_io()
259 struct scfg *cfg; in safte_process_config() local
263 cfg = enc->enc_private; in safte_process_config()
264 if (cfg == NULL) in safte_process_config()
273 cfg->Nfans = buf[0]; in safte_process_config()
274 cfg->Npwr = buf[1]; in safte_process_config()
275 cfg->Nslots = buf[2]; in safte_process_config()
276 cfg->DoorLock = buf[3]; in safte_process_config()
277 cfg->Ntherm = buf[4]; in safte_process_config()
278 cfg->Nspkrs = buf[5]; in safte_process_config()
280 cfg->Ntstats = buf[6] & 0x0f; in safte_process_config()
282 cfg->Ntstats = 0; in safte_process_config()
285 cfg->Nfans, cfg->Npwr, cfg->Nslots, cfg->DoorLock, cfg->Ntherm, in safte_process_config()
286 cfg->Nspkrs, cfg->Ntstats); in safte_process_config()
288 enc->enc_cache.nelms = cfg->Nfans + cfg->Npwr + cfg->Nslots + in safte_process_config()
289 cfg->DoorLock + cfg->Ntherm + cfg->Nspkrs + cfg->Ntstats + 1; in safte_process_config()
290 ENC_FREE_AND_NULL(enc->enc_cache.elm_map); in safte_process_config()
291 enc->enc_cache.elm_map = in safte_process_config()
292 malloc(enc->enc_cache.nelms * sizeof(enc_element_t), in safte_process_config()
300 for (i = 0; i < cfg->Nfans; i++) in safte_process_config()
301 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_FAN; in safte_process_config()
302 cfg->pwroff = (uint8_t) r; in safte_process_config()
303 for (i = 0; i < cfg->Npwr; i++) in safte_process_config()
304 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_POWER; in safte_process_config()
305 for (i = 0; i < cfg->DoorLock; i++) in safte_process_config()
306 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_DOORLOCK; in safte_process_config()
307 if (cfg->Nspkrs > 0) in safte_process_config()
308 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_ALARM; in safte_process_config()
309 for (i = 0; i < cfg->Ntherm; i++) in safte_process_config()
310 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_THERM; in safte_process_config()
311 for (i = 0; i <= cfg->Ntstats; i++) in safte_process_config()
312 enc->enc_cache.elm_map[r++].elm_type = ELMTYP_THERM; in safte_process_config()
313 cfg->slotoff = (uint8_t) r; in safte_process_config()
314 for (i = 0; i < cfg->Nslots; i++) in safte_process_config()
315 enc->enc_cache.elm_map[r++].elm_type = in safte_process_config()
330 struct scfg *cfg; in safte_process_gflags() local
333 cfg = enc->enc_private; in safte_process_gflags()
334 if (cfg == NULL) in safte_process_gflags()
339 cfg->flag1 = buf[1]; in safte_process_gflags()
340 cfg->flag2 = buf[2]; in safte_process_gflags()
342 cfg->adm_status = 0; in safte_process_gflags()
343 if (cfg->flag1 & SAFT_FLG1_GLOBFAIL) in safte_process_gflags()
344 cfg->adm_status |= SES_ENCSTAT_CRITICAL; in safte_process_gflags()
345 else if (cfg->flag1 & SAFT_FLG1_GLOBWARN) in safte_process_gflags()
346 cfg->adm_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_gflags()
355 struct scfg *cfg; in safte_process_status() local
359 enc_cache_t *cache = &enc->enc_cache; in safte_process_status()
361 cfg = enc->enc_private; in safte_process_status()
362 if (cfg == NULL) in safte_process_status()
368 cfg->enc_status = 0; in safte_process_status()
370 for (nitems = i = 0; i < cfg->Nfans; i++) { in safte_process_status()
378 cache->elm_map[oid].encstat[1] = 0; /* resvd */ in safte_process_status()
379 cache->elm_map[oid].encstat[2] = 0; /* resvd */ in safte_process_status()
380 if (cfg->flag1 & SAFT_FLG1_ENCFANFAIL) in safte_process_status()
381 cache->elm_map[oid].encstat[3] |= 0x40; in safte_process_status()
383 cache->elm_map[oid].encstat[3] &= ~0x40; in safte_process_status()
387 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
388 if ((cache->elm_map[oid].encstat[3] & 0x37) == 0) in safte_process_status()
389 cache->elm_map[oid].encstat[3] |= 0x27; in safte_process_status()
393 cache->elm_map[oid].encstat[0] = in safte_process_status()
398 cache->elm_map[oid].encstat[3] |= 0x10; in safte_process_status()
399 cache->elm_map[oid].encstat[3] &= ~0x07; in safte_process_status()
405 if (cfg->Nfans == 1 || (cfg->Ntherm + cfg->Ntstats) == 0) in safte_process_status()
406 cfg->enc_status |= SES_ENCSTAT_CRITICAL; in safte_process_status()
408 cfg->enc_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_status()
411 cache->elm_map[oid].encstat[0] = in safte_process_status()
413 cache->elm_map[oid].encstat[3] |= 0x10; in safte_process_status()
414 cache->elm_map[oid].encstat[3] &= ~0x07; in safte_process_status()
420 if (cfg->Nfans == 1) in safte_process_status()
421 cfg->enc_status |= SES_ENCSTAT_CRITICAL; in safte_process_status()
423 cfg->enc_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_status()
426 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNKNOWN; in safte_process_status()
427 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
428 cfg->enc_status |= SES_ENCSTAT_INFO; in safte_process_status()
431 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNSUPPORTED; in safte_process_status()
436 cache->elm_map[oid++].svalid = 1; in safte_process_status()
444 if (cfg->Nfans && nitems == 0) in safte_process_status()
445 cfg->enc_status |= SES_ENCSTAT_CRITICAL; in safte_process_status()
447 for (i = 0; i < cfg->Npwr; i++) { in safte_process_status()
449 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNKNOWN; in safte_process_status()
450 cache->elm_map[oid].encstat[1] = 0; /* resvd */ in safte_process_status()
451 cache->elm_map[oid].encstat[2] = 0; /* resvd */ in safte_process_status()
452 cache->elm_map[oid].encstat[3] = 0x20; /* requested on */ in safte_process_status()
455 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
458 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
459 cache->elm_map[oid].encstat[3] = 0x10; in safte_process_status()
460 cfg->enc_status |= SES_ENCSTAT_INFO; in safte_process_status()
463 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_CRIT; in safte_process_status()
464 cache->elm_map[oid].encstat[3] = 0x61; in safte_process_status()
465 cfg->enc_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_status()
469 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_NONCRIT; in safte_process_status()
470 cache->elm_map[oid].encstat[3] = 0x51; in safte_process_status()
471 cfg->enc_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_status()
474 cache->elm_map[oid].encstat[0] = in safte_process_status()
476 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
477 cfg->enc_status |= SES_ENCSTAT_INFO; in safte_process_status()
487 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNKNOWN; in safte_process_status()
488 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
489 cfg->enc_status |= SES_ENCSTAT_INFO; in safte_process_status()
496 enc->enc_cache.elm_map[oid++].svalid = 1; in safte_process_status()
503 for (i = 0; i < cfg->Nslots; i++) { in safte_process_status()
505 if (cache->elm_map[cfg->slotoff + i].elm_type == ELMTYP_DEVICE) in safte_process_status()
506 cache->elm_map[cfg->slotoff + i].encstat[1] = buf[r]; in safte_process_status()
515 if (cfg->DoorLock) { in safte_process_status()
521 cache->elm_map[oid].encstat[1] = 0; in safte_process_status()
522 cache->elm_map[oid].encstat[2] = 0; in safte_process_status()
525 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
526 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
529 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
530 cache->elm_map[oid].encstat[3] = 1; in safte_process_status()
533 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNKNOWN; in safte_process_status()
534 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
535 cfg->enc_status |= SES_ENCSTAT_INFO; in safte_process_status()
538 cache->elm_map[oid].encstat[0] = in safte_process_status()
544 cache->elm_map[oid++].svalid = 1; in safte_process_status()
553 if (cfg->Nspkrs) { in safte_process_status()
554 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
555 cache->elm_map[oid].encstat[1] = 0; in safte_process_status()
556 cache->elm_map[oid].encstat[2] = 0; in safte_process_status()
558 cache->elm_map[oid].encstat[0] |= SESCTL_DISABLE; in safte_process_status()
559 cache->elm_map[oid].encstat[3] |= 0x40; in safte_process_status()
561 cache->elm_map[oid++].svalid = 1; in safte_process_status()
567 * of information in enclosure status- 16 bits. Actually, in safte_process_status()
570 * in the SAF-TE spec, this can also be set even if no in safte_process_status()
575 SAFT_BAIL(r + cfg->Ntherm, xfer_len); in safte_process_status()
576 tempflags = buf[r + cfg->Ntherm]; in safte_process_status()
577 SAFT_BAIL(r + cfg->Ntherm + 1, xfer_len); in safte_process_status()
578 tempflags |= (tempflags << 8) | buf[r + cfg->Ntherm + 1]; in safte_process_status()
580 for (i = 0; i < cfg->Ntherm; i++) { in safte_process_status()
583 * Status is a range from -10 to 245 deg Celsius, in safte_process_status()
584 * which we need to normalize to -20 to -245 according in safte_process_status()
587 * Well, still, the base normalization is -20, in safte_process_status()
588 * not -10, so we have to adjust. in safte_process_status()
591 * Hmm- we'll state that 'normal' operating in safte_process_status()
601 * LSI-Logic manual, which seemed to indicate that in safte_process_status()
613 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_CRIT; in safte_process_status()
614 cfg->enc_status |= SES_ENCSTAT_CRITICAL; in safte_process_status()
616 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_status()
617 cache->elm_map[oid].encstat[1] = 0; in safte_process_status()
618 cache->elm_map[oid].encstat[2] = buf[r]; in safte_process_status()
619 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
620 cache->elm_map[oid++].svalid = 1; in safte_process_status()
624 for (i = 0; i <= cfg->Ntstats; i++) { in safte_process_status()
625 cache->elm_map[oid].encstat[1] = 0; in safte_process_status()
627 ((i == cfg->Ntstats) ? 15 : (cfg->Ntherm + i)))) { in safte_process_status()
628 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_CRIT; in safte_process_status()
629 cache->elm_map[4].encstat[2] = 0xff; in safte_process_status()
633 cache->elm_map[oid].encstat[3] = 8; in safte_process_status()
634 cfg->enc_status |= SES_ENCSTAT_CRITICAL; in safte_process_status()
638 * nominal 30 deg (C)- that was wrong. Actually, in safte_process_status()
642 if ((cfg->Ntherm + cfg->Ntstats) == 0) in safte_process_status()
643 cache->elm_map[oid].encstat[0] = in safte_process_status()
646 cache->elm_map[oid].encstat[0] = in safte_process_status()
648 cache->elm_map[oid].encstat[2] = 0; in safte_process_status()
649 cache->elm_map[oid].encstat[3] = 0; in safte_process_status()
651 cache->elm_map[oid++].svalid = 1; in safte_process_status()
655 cache->enc_status = in safte_process_status()
656 cfg->enc_status | cfg->slot_status | cfg->adm_status; in safte_process_status()
664 struct scfg *cfg; in safte_process_slotstatus() local
666 enc_cache_t *cache = &enc->enc_cache; in safte_process_slotstatus()
669 cfg = enc->enc_private; in safte_process_slotstatus()
670 if (cfg == NULL) in safte_process_slotstatus()
674 cfg->slot_status = 0; in safte_process_slotstatus()
675 oid = cfg->slotoff; in safte_process_slotstatus()
676 for (r = i = 0; i < cfg->Nslots; i++, r += 4) { in safte_process_slotstatus()
678 if (cache->elm_map[oid].elm_type == ELMTYP_ARRAY_DEV) in safte_process_slotstatus()
679 cache->elm_map[oid].encstat[1] = 0; in safte_process_slotstatus()
680 cache->elm_map[oid].encstat[2] &= SESCTL_RQSID; in safte_process_slotstatus()
681 cache->elm_map[oid].encstat[3] = 0; in safte_process_slotstatus()
683 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_NOTINSTALLED; in safte_process_slotstatus()
685 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_CRIT; in safte_process_slotstatus()
686 cfg->slot_status |= SES_ENCSTAT_CRITICAL; in safte_process_slotstatus()
688 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_NONCRIT; in safte_process_slotstatus()
689 cfg->slot_status |= SES_ENCSTAT_NONCRITICAL; in safte_process_slotstatus()
691 cache->elm_map[oid].encstat[0] = SES_OBJSTAT_OK; in safte_process_slotstatus()
695 cache->elm_map[oid].encstat[2] |= SESCTL_RQSRMV; in safte_process_slotstatus()
697 cache->elm_map[oid].encstat[2] |= SESCTL_RQSINS; in safte_process_slotstatus()
700 cache->elm_map[oid].encstat[3] |= SESCTL_DEVOFF; in safte_process_slotstatus()
702 cache->elm_map[oid].encstat[3] |= SESCTL_RQSFLT; in safte_process_slotstatus()
704 cache->elm_map[oid].encstat[0] |= SESCTL_PRDFAIL; in safte_process_slotstatus()
705 if (cache->elm_map[oid].elm_type == ELMTYP_ARRAY_DEV) { in safte_process_slotstatus()
707 cache->elm_map[oid].encstat[1] |= 0x80; in safte_process_slotstatus()
709 cache->elm_map[oid].encstat[1] |= 0x02; in safte_process_slotstatus()
711 cache->elm_map[oid].encstat[1] |= 0x04; in safte_process_slotstatus()
713 cache->elm_map[oid].encstat[1] |= 0x08; in safte_process_slotstatus()
715 cache->elm_map[oid].encstat[1] |= 0x10; in safte_process_slotstatus()
717 cache->elm_map[oid].encstat[1] |= 0x20; in safte_process_slotstatus()
719 cache->elm_map[oid].encstat[1] |= 0x01; in safte_process_slotstatus()
721 cache->elm_map[oid++].svalid = 1; in safte_process_slotstatus()
724 cache->enc_status = in safte_process_slotstatus()
725 cfg->enc_status | cfg->slot_status | cfg->adm_status; in safte_process_slotstatus()
733 struct scfg *cfg; in safte_fill_control_request() local
738 cfg = enc->enc_private; in safte_fill_control_request()
739 if (cfg == NULL) in safte_fill_control_request()
742 if (enc->enc_cache.nelms == 0) { in safte_fill_control_request()
744 return (-1); in safte_fill_control_request()
747 if (cfg->current_request == NULL) { in safte_fill_control_request()
748 cfg->current_request = TAILQ_FIRST(&cfg->requests); in safte_fill_control_request()
749 TAILQ_REMOVE(&cfg->requests, cfg->current_request, links); in safte_fill_control_request()
750 cfg->current_request_stage = 0; in safte_fill_control_request()
751 cfg->current_request_stages = 1; in safte_fill_control_request()
753 req = cfg->current_request; in safte_fill_control_request()
755 idx = (int)req->elm_idx; in safte_fill_control_request()
756 if (req->elm_idx == SES_SETSTATUS_ENC_IDX) { in safte_fill_control_request()
757 cfg->adm_status = req->elm_stat[0] & ALL_ENC_STAT; in safte_fill_control_request()
758 cfg->flag1 &= ~(SAFT_FLG1_GLOBFAIL|SAFT_FLG1_GLOBWARN); in safte_fill_control_request()
759 if (req->elm_stat[0] & (SES_ENCSTAT_CRITICAL|SES_ENCSTAT_UNRECOV)) in safte_fill_control_request()
760 cfg->flag1 |= SAFT_FLG1_GLOBFAIL; in safte_fill_control_request()
761 else if (req->elm_stat[0] & SES_ENCSTAT_NONCRITICAL) in safte_fill_control_request()
762 cfg->flag1 |= SAFT_FLG1_GLOBWARN; in safte_fill_control_request()
764 buf[1] = cfg->flag1; in safte_fill_control_request()
765 buf[2] = cfg->flag2; in safte_fill_control_request()
769 ep = &enc->enc_cache.elm_map[idx]; in safte_fill_control_request()
771 switch (ep->elm_type) { in safte_fill_control_request()
774 switch (cfg->current_request_stage) { in safte_fill_control_request()
776 ep->priv = 0; in safte_fill_control_request()
777 if (req->elm_stat[0] & SESCTL_PRDFAIL) in safte_fill_control_request()
778 ep->priv |= 0x40; in safte_fill_control_request()
779 if (req->elm_stat[3] & SESCTL_RQSFLT) in safte_fill_control_request()
780 ep->priv |= 0x02; in safte_fill_control_request()
781 if (ep->elm_type == ELMTYP_ARRAY_DEV) { in safte_fill_control_request()
782 if (req->elm_stat[1] & 0x01) in safte_fill_control_request()
783 ep->priv |= 0x200; in safte_fill_control_request()
784 if (req->elm_stat[1] & 0x02) in safte_fill_control_request()
785 ep->priv |= 0x04; in safte_fill_control_request()
786 if (req->elm_stat[1] & 0x04) in safte_fill_control_request()
787 ep->priv |= 0x08; in safte_fill_control_request()
788 if (req->elm_stat[1] & 0x08) in safte_fill_control_request()
789 ep->priv |= 0x10; in safte_fill_control_request()
790 if (req->elm_stat[1] & 0x10) in safte_fill_control_request()
791 ep->priv |= 0x20; in safte_fill_control_request()
792 if (req->elm_stat[1] & 0x20) in safte_fill_control_request()
793 ep->priv |= 0x100; in safte_fill_control_request()
794 if (req->elm_stat[1] & 0x80) in safte_fill_control_request()
795 ep->priv |= 0x01; in safte_fill_control_request()
797 if (ep->priv == 0) in safte_fill_control_request()
798 ep->priv |= 0x01; /* no errors */ in safte_fill_control_request()
801 for (i = 0; i < cfg->Nslots; i++) { in safte_fill_control_request()
802 ep1 = &enc->enc_cache.elm_map[cfg->slotoff + i]; in safte_fill_control_request()
803 buf[1 + (3 * i)] = ep1->priv; in safte_fill_control_request()
804 buf[2 + (3 * i)] = ep1->priv >> 8; in safte_fill_control_request()
806 xfer_len = cfg->Nslots * 3 + 1; in safte_fill_control_request()
810 if (DEVON(req->elm_stat) != DEVON(ep->encstat)) in safte_fill_control_request()
811 cfg->current_request_stages++; in safte_fill_control_request()
813 if (IDON(req->elm_stat) != IDON(ep->encstat)) in safte_fill_control_request()
814 cfg->current_request_stages++; in safte_fill_control_request()
819 buf[1] = idx - cfg->slotoff; in safte_fill_control_request()
820 if (cfg->current_request_stage == 1 && in safte_fill_control_request()
821 DEVON(req->elm_stat) != DEVON(ep->encstat)) { in safte_fill_control_request()
822 if (DEVON(req->elm_stat)) in safte_fill_control_request()
827 if (IDON(req->elm_stat)) in safte_fill_control_request()
831 ep->encstat[2] &= ~SESCTL_RQSID; in safte_fill_control_request()
832 ep->encstat[2] |= req->elm_stat[2] & in safte_fill_control_request()
842 cfg->current_request_stages = 2; in safte_fill_control_request()
843 switch (cfg->current_request_stage) { in safte_fill_control_request()
845 if (req->elm_stat[3] & SESCTL_RQSTFAIL) { in safte_fill_control_request()
846 cfg->flag1 |= SAFT_FLG1_ENCPWRFAIL; in safte_fill_control_request()
848 cfg->flag1 &= ~SAFT_FLG1_ENCPWRFAIL; in safte_fill_control_request()
851 buf[1] = cfg->flag1; in safte_fill_control_request()
852 buf[2] = cfg->flag2; in safte_fill_control_request()
858 buf[1] = idx - cfg->pwroff; in safte_fill_control_request()
859 if (req->elm_stat[3] & SESCTL_RQSTON) in safte_fill_control_request()
870 if ((req->elm_stat[3] & 0x7) != 0) in safte_fill_control_request()
871 cfg->current_request_stages = 2; in safte_fill_control_request()
872 switch (cfg->current_request_stage) { in safte_fill_control_request()
874 if (req->elm_stat[3] & SESCTL_RQSTFAIL) in safte_fill_control_request()
875 cfg->flag1 |= SAFT_FLG1_ENCFANFAIL; in safte_fill_control_request()
877 cfg->flag1 &= ~SAFT_FLG1_ENCFANFAIL; in safte_fill_control_request()
879 buf[1] = cfg->flag1; in safte_fill_control_request()
880 buf[2] = cfg->flag2; in safte_fill_control_request()
887 if (req->elm_stat[3] & SESCTL_RQSTON) { in safte_fill_control_request()
888 if ((req->elm_stat[3] & 0x7) == 7) in safte_fill_control_request()
890 else if ((req->elm_stat[3] & 0x7) >= 5) in safte_fill_control_request()
892 else if ((req->elm_stat[3] & 0x7) >= 3) in safte_fill_control_request()
900 ep->encstat[3] = req->elm_stat[3] & 0x67; in safte_fill_control_request()
906 if (req->elm_stat[3] & 0x1) in safte_fill_control_request()
907 cfg->flag2 &= ~SAFT_FLG2_LOCKDOOR; in safte_fill_control_request()
909 cfg->flag2 |= SAFT_FLG2_LOCKDOOR; in safte_fill_control_request()
911 buf[1] = cfg->flag1; in safte_fill_control_request()
912 buf[2] = cfg->flag2; in safte_fill_control_request()
917 if ((req->elm_stat[0] & SESCTL_DISABLE) || in safte_fill_control_request()
918 (req->elm_stat[3] & 0x40)) { in safte_fill_control_request()
919 cfg->flag2 &= ~SAFT_FLG1_ALARM; in safte_fill_control_request()
920 } else if ((req->elm_stat[3] & 0x0f) != 0) { in safte_fill_control_request()
921 cfg->flag2 |= SAFT_FLG1_ALARM; in safte_fill_control_request()
923 cfg->flag2 &= ~SAFT_FLG1_ALARM; in safte_fill_control_request()
926 buf[1] = cfg->flag1; in safte_fill_control_request()
927 buf[2] = cfg->flag2; in safte_fill_control_request()
930 ep->encstat[3] = req->elm_stat[3]; in safte_fill_control_request()
937 if (enc->enc_type == ENC_SEMB_SAFT) { in safte_fill_control_request()
938 semb_write_buffer(&ccb->ataio, /*retries*/5, in safte_fill_control_request()
940 buf, xfer_len, state->timeout); in safte_fill_control_request()
942 scsi_write_buffer(&ccb->csio, /*retries*/5, in safte_fill_control_request()
945 SSD_FULL_SIZE, state->timeout); in safte_fill_control_request()
954 struct scfg *cfg; in safte_process_control_request() local
958 cfg = enc->enc_private; in safte_process_control_request()
959 if (cfg == NULL) in safte_process_control_request()
962 req = cfg->current_request; in safte_process_control_request()
963 if (req->result == 0) in safte_process_control_request()
964 req->result = error; in safte_process_control_request()
965 if (++cfg->current_request_stage >= cfg->current_request_stages) { in safte_process_control_request()
966 idx = req->elm_idx; in safte_process_control_request()
968 type = -1; in safte_process_control_request()
970 type = enc->enc_cache.elm_map[idx].elm_type; in safte_process_control_request()
975 cfg->current_request = NULL; in safte_process_control_request()
986 struct scfg *cfg; in safte_softc_invalidate() local
988 cfg = enc->enc_private; in safte_softc_invalidate()
989 safte_terminate_control_requests(&cfg->requests, ENXIO); in safte_softc_invalidate()
996 ENC_FREE_AND_NULL(enc->enc_cache.elm_map); in safte_softc_cleanup()
997 ENC_FREE_AND_NULL(enc->enc_private); in safte_softc_cleanup()
998 enc->enc_cache.nelms = 0; in safte_softc_cleanup()
1004 struct scfg *cfg; in safte_init_enc() local
1008 cfg = enc->enc_private; in safte_init_enc()
1009 if (cfg == NULL) in safte_init_enc()
1017 cfg->flag1 = 0; in safte_init_enc()
1018 cfg->flag2 = 0; in safte_init_enc()
1026 struct scfg *cfg; in safte_set_enc_status() local
1029 cfg = enc->enc_private; in safte_set_enc_status()
1030 if (cfg == NULL) in safte_set_enc_status()
1037 TAILQ_INSERT_TAIL(&cfg->requests, &req, links); in safte_set_enc_status()
1039 cam_periph_sleep(enc->periph, &req, PUSER, "encstat", 0); in safte_set_enc_status()
1047 int i = (int)elms->elm_idx; in safte_get_elm_status()
1049 elms->cstat[0] = enc->enc_cache.elm_map[i].encstat[0]; in safte_get_elm_status()
1050 elms->cstat[1] = enc->enc_cache.elm_map[i].encstat[1]; in safte_get_elm_status()
1051 elms->cstat[2] = enc->enc_cache.elm_map[i].encstat[2]; in safte_get_elm_status()
1052 elms->cstat[3] = enc->enc_cache.elm_map[i].encstat[3]; in safte_get_elm_status()
1059 struct scfg *cfg; in safte_set_elm_status() local
1062 cfg = enc->enc_private; in safte_set_elm_status()
1063 if (cfg == NULL) in safte_set_elm_status()
1067 if ((elms->cstat[0] & SESCTL_CSEL) == 0) in safte_set_elm_status()
1070 req.elm_idx = elms->elm_idx; in safte_set_elm_status()
1071 memcpy(&req.elm_stat, elms->cstat, sizeof(req.elm_stat)); in safte_set_elm_status()
1074 TAILQ_INSERT_TAIL(&cfg->requests, &req, links); in safte_set_elm_status()
1076 cam_periph_sleep(enc->periph, &req, PUSER, "encstat", 0); in safte_set_elm_status()
1103 struct scfg *cfg; in safte_softc_init() local
1105 enc->enc_vec = safte_enc_vec; in safte_softc_init()
1106 enc->enc_fsm_states = enc_fsm_states; in safte_softc_init()
1108 if (enc->enc_private == NULL) { in safte_softc_init()
1109 enc->enc_private = ENC_MALLOCZ(SAFT_PRIVATE); in safte_softc_init()
1110 if (enc->enc_private == NULL) in safte_softc_init()
1113 cfg = enc->enc_private; in safte_softc_init()
1115 enc->enc_cache.nelms = 0; in safte_softc_init()
1116 enc->enc_cache.enc_status = 0; in safte_softc_init()
1118 TAILQ_INIT(&cfg->requests); in safte_softc_init()