Lines Matching refs:ssc
370 struct ses_softc *ssc = device_lookup_private(&ses_cd, SESUNIT(dev));
380 SC_DEBUG(ssc->sc_periph, SCSIPI_DB2, ("sesioctl 0x%lx ", cmd));
385 if ((ssc->ses_flags & SES_FLAG_INITIALIZED) == 0) {
411 error = copyout(&ssc->ses_nobjects, addr,
412 sizeof (ssc->ses_nobjects));
419 for (uobj = addr, i = 0; i != ssc->ses_nobjects; i++, uobj++) {
421 obj.subencid = ssc->ses_objmap[i].subenclosure;
422 obj.object_type = ssc->ses_objmap[i].enctype;
433 error = (*ssc->ses_vec.get_encstat)(ssc, 1);
436 tmp = ssc->ses_encstat & ~ENCI_SVALID;
438 ssc->ses_encstat = tmp;
447 error = (*ssc->ses_vec.set_encstat)(ssc, tmp, 1);
456 if (objs.obj_id >= ssc->ses_nobjects) {
460 error = (*ssc->ses_vec.get_objstat)(ssc, &objs, 1);
467 ssc->ses_objmap[objs.obj_id].svalid = 0;
477 if (objs.obj_id >= ssc->ses_nobjects) {
481 error = (*ssc->ses_vec.set_objstat)(ssc, &objs, 1);
486 ssc->ses_objmap[objs.obj_id].svalid = 0;
491 error = (*ssc->ses_vec.init_enc)(ssc);
495 error = scsipi_do_ioctl(ssc->sc_periph,
503 ses_runcmd(struct ses_softc *ssc, char *cdb, int cdbl, char *dptr, int *dlenp)
527 error = scsipi_command(ssc->sc_periph, &sgen, cdbl,
537 ses_log(struct ses_softc *ssc, const char *fmt, ...)
541 printf("%s: ", device_xname(ssc->sc_dev));
790 ses_softc_init(ses_softc_t *ssc, int doinit)
794 if (ssc->ses_nobjects) {
795 SES_FREE(ssc->ses_objmap,
796 ssc->ses_nobjects * sizeof (encobj));
797 ssc->ses_objmap = NULL;
799 if ((cc = ssc->ses_private) != NULL) {
805 if (cc->ses_typidx && ssc->ses_nobjects) {
807 ssc->ses_nobjects * sizeof (struct typidx));
811 ssc->ses_private = NULL;
813 ssc->ses_nobjects = 0;
816 if (ssc->ses_private == NULL) {
817 ssc->ses_private = SES_MALLOC(sizeof (struct sscfg));
819 if (ssc->ses_private == NULL) {
822 ssc->ses_nobjects = 0;
823 ssc->ses_encstat = 0;
824 return (ses_getconfig(ssc));
830 struct ses_softc *ssc = device_private(self);
831 struct sscfg *cc = ssc->ses_private;
833 if (ssc->ses_objmap) {
834 SES_FREE(ssc->ses_objmap, (nobj * sizeof (encobj)));
851 ses_init_enc(ses_softc_t *ssc)
857 ses_get_encstat(ses_softc_t *ssc, int slpflag)
862 if ((status = ses_getputstat(ssc, -1, &ComStat, slpflag, 1)) != 0) {
865 ssc->ses_encstat = ComStat.comstatus | ENCI_SVALID;
870 ses_set_encstat(ses_softc_t *ssc, uint8_t encstat, int slpflag)
876 if ((status = ses_getputstat(ssc, -1, &ComStat, slpflag, 0)) != 0) {
879 ssc->ses_encstat = encstat & 0xf; /* note no SVALID set */
884 ses_get_objstat(ses_softc_t *ssc, ses_objstat *obp, int slpflag)
888 if (ssc->ses_objmap[i].svalid == 0) {
890 int err = ses_getputstat(ssc, i, &ComStat, slpflag, 1);
893 ssc->ses_objmap[i].encstat[0] = ComStat.comstatus;
894 ssc->ses_objmap[i].encstat[1] = ComStat.comstat[0];
895 ssc->ses_objmap[i].encstat[2] = ComStat.comstat[1];
896 ssc->ses_objmap[i].encstat[3] = ComStat.comstat[2];
897 ssc->ses_objmap[i].svalid = 1;
899 obp->cstat[0] = ssc->ses_objmap[i].encstat[0];
900 obp->cstat[1] = ssc->ses_objmap[i].encstat[1];
901 obp->cstat[2] = ssc->ses_objmap[i].encstat[2];
902 obp->cstat[3] = ssc->ses_objmap[i].encstat[3];
907 ses_set_objstat(ses_softc_t *ssc, ses_objstat *obp, int slpflag)
921 err = ses_getputstat(ssc, (int)obp->obj_id, &ComStat, slpflag, 0);
922 ssc->ses_objmap[(int)obp->obj_id].svalid = 0;
927 ses_getconfig(ses_softc_t *ssc)
940 cc = ssc->ses_private;
950 err = ses_runcmd(ssc, cdb, 6, sdata, &amt);
958 SES_LOG(ssc, "Unable to parse SES Config Header\n");
963 SES_LOG(ssc, "runt enclosure length (%d)\n", amt);
968 SES_VLOG(ssc, "GenCode %x %d Subenclosures\n", cf.GenCode, cf.Nsubenc);
983 SES_LOG(ssc, "Cannot Extract Enclosure Header %d\n", i);
987 SES_VLOG(ssc, " SubEnclosure ID %d, %d Types With this ID, En"
991 SES_LOG(ssc, "Can't get Enclosure Descriptor %d\n", i);
995 SES_VLOG(ssc, " WWN: %02x%02x%02x%02x%02x%02x%02x%02x\n",
1009 SES_LOG(ssc, "Can't get Enclosure Type Header %d\n", i);
1013 SES_LOG(ssc, " Type Desc[%d]: Type 0x%x, MaxElt %d, In Subenc "
1024 ssc->ses_objmap = SES_MALLOC(nobj * sizeof (encobj));
1028 if (ssc->ses_objmap == NULL || cc->ses_typidx == NULL ||
1030 if (ssc->ses_objmap) {
1031 SES_FREE(ssc->ses_objmap, (nobj * sizeof (encobj)));
1032 ssc->ses_objmap = NULL;
1046 MEMZERO(ssc->ses_objmap, nobj * sizeof (encobj));
1050 ssc->ses_nobjects = nobj;
1066 ssc->ses_objmap[nobj].subenclosure = thdr.enc_subenc;
1067 ssc->ses_objmap[nobj++].enctype = thdr.enc_type;
1075 ses_getputstat(ses_softc_t *ssc, int objid, SesComStat *sp, int slp,
1082 cc = ssc->ses_private;
1100 bufsiz = (ssc->ses_nobjects * 4) + (cc->ses_ntypes * 4) + 8;
1113 err = ses_runcmd(ssc, cdb, 6, sdata, &amt);
1142 err = ses_runcmd(ssc, cdb, 6, sdata, &amt);
1494 SES_LOG(ssc, safte_2little, x, __LINE__);\
1501 safte_softc_init(ses_softc_t *ssc, int doinit)
1507 if (ssc->ses_nobjects) {
1508 if (ssc->ses_objmap) {
1509 SES_FREE(ssc->ses_objmap,
1510 ssc->ses_nobjects * sizeof (encobj));
1511 ssc->ses_objmap = NULL;
1513 ssc->ses_nobjects = 0;
1515 if (ssc->ses_private) {
1516 SES_FREE(ssc->ses_private, SAFT_PRIVATE);
1517 ssc->ses_private = NULL;
1522 if (ssc->ses_private == NULL) {
1523 ssc->ses_private = SES_MALLOC(SAFT_PRIVATE);
1524 if (ssc->ses_private == NULL) {
1527 MEMZERO(ssc->ses_private, SAFT_PRIVATE);
1530 ssc->ses_nobjects = 0;
1531 ssc->ses_encstat = 0;
1533 if ((err = safte_getconfig(ssc)) != 0) {
1542 cc = ssc->ses_private;
1543 ssc->ses_nobjects = cc->Nfans + cc->Npwr + cc->Nslots + cc->DoorLock +
1545 ssc->ses_objmap = (encobj *)
1546 SES_MALLOC(ssc->ses_nobjects * sizeof (encobj));
1547 if (ssc->ses_objmap == NULL) {
1550 MEMZERO(ssc->ses_objmap, ssc->ses_nobjects * sizeof (encobj));
1558 ssc->ses_objmap[r++].enctype = SESTYP_FAN;
1561 ssc->ses_objmap[r++].enctype = SESTYP_POWER;
1563 ssc->ses_objmap[r++].enctype = SESTYP_DOORLOCK;
1565 ssc->ses_objmap[r++].enctype = SESTYP_ALARM;
1567 ssc->ses_objmap[r++].enctype = SESTYP_THERM;
1569 ssc->ses_objmap[r++].enctype = SESTYP_THERM;
1570 ssc->ses_objmap[r++].enctype = SESTYP_ALARM;
1573 ssc->ses_objmap[r++].enctype = SESTYP_DEVICE;
1578 safte_init_enc(ses_softc_t *ssc)
1590 err = ses_runcmd(ssc, cdb0, 6, NULL, 0);
1598 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);
1604 safte_get_encstat(ses_softc_t *ssc, int slpflg)
1606 return (safte_rdstat(ssc, slpflg));
1610 safte_set_encstat(ses_softc_t *ssc, uint8_t encstat, int slpflg)
1612 struct scfg *cc = ssc->ses_private;
1621 ssc->ses_encstat &= ~ALL_ENC_STAT;
1622 ssc->ses_encstat |= (encstat & ALL_ENC_STAT);
1623 ssc->ses_encstat |= ENCI_SVALID;
1630 return (wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1, cc->flag2, 0, slpflg));
1634 safte_get_objstat(ses_softc_t *ssc, ses_objstat *obp, int slpflg)
1638 if ((ssc->ses_encstat & ENCI_SVALID) == 0 ||
1639 (ssc->ses_objmap[i].svalid) == 0) {
1640 int err = safte_rdstat(ssc, slpflg);
1644 obp->cstat[0] = ssc->ses_objmap[i].encstat[0];
1645 obp->cstat[1] = ssc->ses_objmap[i].encstat[1];
1646 obp->cstat[2] = ssc->ses_objmap[i].encstat[2];
1647 obp->cstat[3] = ssc->ses_objmap[i].encstat[3];
1653 safte_set_objstat(ses_softc_t *ssc, ses_objstat *obp, int slp)
1660 SES_VLOG(ssc, "safte_set_objstat(%d): %x %x %x %x\n",
1676 err = set_objstat_sel(ssc, obp, slp);
1681 cc = ssc->ses_private;
1686 ep = &ssc->ses_objmap[idx];
1704 err = perf_slotop(ssc, (uint8_t) idx - (uint8_t) cc->slotoff,
1718 wrslot_stat(ssc, slp);
1727 err = wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
1732 (void) wrbuf16(ssc, SAFTE_WT_ACTPWS,
1735 (void) wrbuf16(ssc, SAFTE_WT_ACTPWS,
1745 err = wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
1760 (void) wrbuf16(ssc, SAFTE_WT_FANSPD, idx, fsp, 0, slp);
1762 (void) wrbuf16(ssc, SAFTE_WT_FANSPD, idx, 0, 0, slp);
1771 (void) wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
1787 (void) wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
1798 safte_getconfig(ses_softc_t *ssc)
1806 cfg = ssc->ses_private;
1815 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);
1822 SES_LOG(ssc, "too little data (%d) for configuration\n", amt);
1826 SES_VLOG(ssc, "Nfans %d Npwr %d Nslots %d Lck %d Ntherm %d Nspkrs %d\n",
1840 safte_rdstat(ses_softc_t *ssc, int slpflg)
1847 struct scfg *cc = ssc->ses_private;
1857 if (ssc->ses_nobjects > buflen)
1858 buflen = ssc->ses_nobjects;
1874 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);
1885 for (i = 0; i < ssc->ses_nobjects; i++)
1886 ssc->ses_objmap[i].svalid = 0;
1887 oencstat = ssc->ses_encstat & ALL_ENC_STAT;
1888 ssc->ses_encstat = 0;
1906 ssc->ses_objmap[oid].encstat[1] = 0; /* resvd */
1907 ssc->ses_objmap[oid].encstat[2] = 0; /* resvd */
1911 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
1917 ssc->ses_objmap[oid].encstat[3] = 7;
1921 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_CRIT;
1925 ssc->ses_objmap[oid].encstat[3] = 0x40;
1932 ssc->ses_encstat |= SES_ENCSTAT_CRITICAL;
1934 ssc->ses_encstat |= SES_ENCSTAT_NONCRITICAL;
1937 ssc->ses_objmap[oid].encstat[0] =
1939 ssc->ses_objmap[oid].encstat[3] = 0;
1946 ssc->ses_encstat |= SES_ENCSTAT_CRITICAL;
1948 ssc->ses_encstat |= SES_ENCSTAT_NONCRITICAL;
1951 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_UNKNOWN;
1952 ssc->ses_objmap[oid].encstat[3] = 0;
1953 ssc->ses_encstat |= SES_ENCSTAT_INFO;
1956 ssc->ses_objmap[oid].encstat[0] =
1958 SES_LOG(ssc, "Unknown fan%d status 0x%x\n", i,
1962 ssc->ses_objmap[oid++].svalid = 1;
1971 ssc->ses_encstat |= SES_ENCSTAT_CRITICAL;
1977 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_UNKNOWN;
1978 ssc->ses_objmap[oid].encstat[1] = 0; /* resvd */
1979 ssc->ses_objmap[oid].encstat[2] = 0; /* resvd */
1980 ssc->ses_objmap[oid].encstat[3] = 0x20; /* requested on */
1983 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
1986 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
1987 ssc->ses_objmap[oid].encstat[3] = 0x10;
1988 ssc->ses_encstat |= SES_ENCSTAT_INFO;
1991 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_CRIT;
1992 ssc->ses_objmap[oid].encstat[3] = 0x61;
1993 ssc->ses_encstat |= SES_ENCSTAT_NONCRITICAL;
1997 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_NONCRIT;
1998 ssc->ses_objmap[oid].encstat[3] = 0x51;
1999 ssc->ses_encstat |= SES_ENCSTAT_NONCRITICAL;
2002 ssc->ses_objmap[oid].encstat[0] =
2004 ssc->ses_objmap[oid].encstat[3] = 0;
2005 ssc->ses_encstat |= SES_ENCSTAT_INFO;
2015 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_UNKNOWN;
2016 ssc->ses_objmap[oid].encstat[3] = 0;
2017 ssc->ses_encstat |= SES_ENCSTAT_INFO;
2020 SES_LOG(ssc
2024 ssc->ses_objmap[oid++].svalid = 1;
2044 ssc->ses_objmap[oid].encstat[1] = 0;
2045 ssc->ses_objmap[oid].encstat[2] = 0;
2048 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2049 ssc->ses_objmap[oid].encstat[3] = 0;
2052 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2053 ssc->ses_objmap[oid].encstat[3] = 1;
2056 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_UNKNOWN;
2057 ssc->ses_objmap[oid].encstat[3] = 0;
2058 ssc->ses_encstat |= SES_ENCSTAT_INFO;
2061 ssc->ses_objmap[oid].encstat[0] =
2063 SES_LOG(ssc, "unknown lock status 0x%x\n",
2067 ssc->ses_objmap[oid++].svalid = 1;
2077 ssc->ses_objmap[oid].encstat[1] = 0;
2078 ssc->ses_objmap[oid].encstat[2] = 0;
2084 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_NONCRIT;
2085 ssc->ses_objmap[oid].encstat[3] = 0x8;
2086 ssc->ses_encstat |= SES_ENCSTAT_NONCRITICAL;
2088 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2089 ssc->ses_objmap[oid].encstat[3] = 0;
2091 ssc->ses_objmap[oid].encstat[0] =
2093 ssc->ses_objmap[oid].encstat[3] = 0;
2094 SES_LOG(ssc, "unknown spkr status 0x%x\n",
2097 ssc->ses_objmap[oid++].svalid = 1;
2133 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_NOTAVAIL;
2134 ssc->ses_objmap[oid].encstat[1] = 0;
2135 ssc->ses_objmap[oid].encstat[2] = sdata[r];
2136 ssc->ses_objmap[oid].encstat[3] = 0;
2137 ssc->ses_objmap[oid++].svalid = 1;
2157 ssc->ses_objmap[oid].encstat[1] = 0;
2159 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_CRIT;
2160 ssc->ses_objmap[4].encstat[2] = 0xff;
2164 ssc->ses_objmap[oid].encstat[3] = 8;
2165 ssc->ses_encstat |= SES_ENCSTAT_CRITICAL;
2173 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2174 ssc->ses_objmap[oid].encstat[2] = 0;
2175 ssc->ses_objmap[oid].encstat[3] = 0;
2177 ssc->ses_objmap[oid++].svalid = 1;
2183 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2184 ssc->ses_objmap[oid].encstat[3] = ssc->ses_objmap[oid].priv;
2185 ssc->ses_objmap[oid++].svalid = 1;
2192 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);
2200 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_UNSUPPORTED;
2201 ssc->ses_objmap[oid].encstat[1] = (uint8_t) i;
2202 ssc->ses_objmap[oid].encstat[2] = 0;
2203 ssc->ses_objmap[oid].encstat[3] = 0;
2206 ssc->ses_objmap[oid].encstat[0] =
2209 ssc->ses_objmap[oid].encstat[0] = SES_OBJSTAT_OK;
2212 ssc->ses_objmap[oid].encstat[2] = 0x8;
2215 ssc->ses_objmap[oid].encstat[3] = 0x10;
2217 ssc->ses_objmap[oid++].svalid = 1;
2220 ssc->ses_encstat |= ENCI_SVALID | oencstat;
2226 set_objstat_sel(ses_softc_t *ssc, ses_objstat *obp, int slp)
2230 struct scfg *cc = ssc->ses_private;
2236 ep = &ssc->ses_objmap[idx];
2256 wrslot_stat(ssc, slp);
2264 (void) wrbuf16(ssc, SAFTE_WT_ACTPWS,
2275 (void) wrbuf16(ssc, SAFTE_WT_FANSPD, idx, 0, 0, slp);
2284 (void) wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
2295 (void) wrbuf16(ssc, SAFTE_WT_GLOBAL, cc->flag1,
2310 wrbuf16(ses_softc_t *ssc, uint8_t op, uint8_t b1, uint8_t b2,
2315 struct scfg *cc = ssc->ses_private;
2325 SES_VLOG(ssc, "saf_wrbuf16 %x %x %x %x\n", op, b1, b2, b3);
2333 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);
2345 wrslot_stat(ses_softc_t *ssc, int slp)
2350 struct scfg *cc = ssc->ses_private;
2355 SES_VLOG(ssc, "saf_wrslot\n");
2374 ep = &ssc->ses_objmap[cc->slotoff + i];
2375 SES_VLOG(ssc, "saf_wrslot %d <- %x\n", i, ep->priv & 0xff);
2379 (void) ses_runcmd(ssc, cdb, 10, sdata, &amt);
2387 perf_slotop(ses_softc_t *ssc, uint8_t slot, uint8_t opflag, int slp)
2391 struct scfg *cc = ssc->ses_private;
2406 SES_VLOG(ssc, "saf_slotop slot %d op %x\n", slot, opflag);
2408 err = ses_runcmd(ssc, cdb, 10, sdata, &amt);