Lines Matching refs:sc

203 	struct tpm_softc *sc = device_get_softc(dev);
206 sc->mem_rid = 0;
207 sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->mem_rid,
209 if (sc->mem_res == NULL)
212 sc->sc_bt = rman_get_bustag(sc->mem_res);
213 sc->sc_bh = rman_get_bushandle(sc->mem_res);
215 sc->irq_rid = 0;
216 sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irq_rid,
218 if (sc->irq_res != NULL)
219 irq = rman_get_start(sc->irq_res);
224 tpm_tis12_probe(sc->sc_bt, sc->sc_bh);
226 if (tpm_legacy_probe(sc->sc_bt, sc->sc_bh)) {
227 sc->sc_init = tpm_legacy_init;
228 sc->sc_start = tpm_legacy_start;
229 sc->sc_read = tpm_legacy_read;
230 sc->sc_write = tpm_legacy_write;
231 sc->sc_end = tpm_legacy_end;
233 sc->sc_init = tpm_tis12_init;
234 sc->sc_start = tpm_tis12_start;
235 sc->sc_read = tpm_tis12_read;
236 sc->sc_write = tpm_tis12_write;
237 sc->sc_end = tpm_tis12_end;
241 if ((sc->sc_init)(sc, irq, "tpm")) {
246 if (sc->sc_init == tpm_tis12_init && sc->irq_res != NULL &&
247 bus_setup_intr(dev, sc->irq_res, INTR_TYPE_TTY, NULL,
248 tpm_intr, sc, &sc->intr_cookie) != 0) {
254 sc->sc_cdev = make_dev(&tpm_cdevsw, device_get_unit(dev),
256 sc->sc_cdev->si_drv1 = sc;
264 struct tpm_softc * sc = device_get_softc(dev);
266 if(sc->intr_cookie){
267 bus_teardown_intr(dev, sc->irq_res, sc->intr_cookie);
270 if(sc->mem_res){
272 sc->mem_rid, sc->mem_res);
275 if(sc->irq_res){
277 sc->irq_rid, sc->irq_res);
279 if(sc->sc_cdev){
280 destroy_dev(sc->sc_cdev);
325 tpm_tis12_irqinit(struct tpm_softc *sc, int irq, int idx)
330 sc->sc_vector = IRQUNK;
335 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE,
336 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE) &
338 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INT_STATUS,
339 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INT_STATUS));
342 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_INT_VECTOR, irq);
343 sc->sc_vector = irq;
346 if (sc->sc_capabilities & TPM_INTF_INT_EDGE_RISING)
348 else if (sc->sc_capabilities & TPM_INTF_INT_LEVEL_HIGH)
352 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE, r);
359 tpm_tis12_init(struct tpm_softc *sc, int irq, const char *name)
364 r = bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTF_CAPABILITIES);
373 sc->sc_capabilities = r;
375 sc->sc_devid = bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_ID);
376 sc->sc_rev = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_REV);
379 if (tpm_devs[i].devid == sc->sc_devid)
383 printf(": %s rev 0x%x\n", tpm_devs[i].name, sc->sc_rev);
385 printf(": device 0x%08x rev 0x%x\n", sc->sc_devid, sc->sc_rev);
387 if (tpm_tis12_irqinit(sc, irq, i))
390 if (tpm_request_locality(sc, 0))
394 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_STS, TPM_STS_CMD_READY);
400 tpm_request_locality(struct tpm_softc *sc, int l)
408 if ((bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_ACCESS) &
413 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_ACCESS,
418 while ((r = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_ACCESS) &
421 rv = tsleep(sc->sc_init, PRIBIO | PCATCH, "tpm_locality", 1);
442 tpm_getburst(struct tpm_softc *sc)
455 burst = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_STS + 1);
456 burst |= bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_STS + 2)
464 rv = tsleep(sc, PRIBIO | PCATCH, "tpm_getburst", 1);
474 tpm_status(struct tpm_softc *sc)
478 status = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_STS) &
499 struct tpm_softc *sc = device_get_softc(dev);
510 sc->sc_write(sc, &command, sizeof(command));
511 sc->sc_read(sc, &command, sizeof(command), NULL, TPM_HDRSIZE);
513 printf("tpm_suspend: power down: %d -> %d\n", sc->sc_suspend, why);
515 sc->sc_suspend = why;
527 struct tpm_softc *sc = device_get_softc(dev);
530 printf("tpm_resume: resume: %d -> %d\n", sc->sc_suspend, why);
532 sc->sc_suspend = why;
541 tpm_waitfor_poll(struct tpm_softc *sc, u_int8_t mask, int tmo, void *c)
549 while (((sc->sc_stat = tpm_status(sc)) & mask) != mask && tmo--) {
564 tpm_waitfor_int(struct tpm_softc *sc, u_int8_t mask, int tmo, void *c,
570 sc->sc_stat = tpm_status(sc);
571 if ((sc->sc_stat & mask) == mask)
579 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE,
580 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE) |
582 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE,
583 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE) |
590 sc->sc_stat = tpm_status(sc);
591 if ((sc->sc_stat & mask) == mask) {
608 sc->sc_stat = tpm_status(sc);
611 sc->sc_stat, TPM_STS_BITS);
613 if ((sc->sc_stat & mask) == mask)
617 out: bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE,
618 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE) &
620 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE,
621 bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INTERRUPT_ENABLE) &
631 tpm_waitfor(struct tpm_softc *sc, u_int8_t b0, int tmo, void *c)
648 if (sc->sc_vector != IRQUNK) {
660 if ((b & TPM_STS_DATA_AVAIL) && (sc->sc_capabilities &
662 return tpm_waitfor_int(sc, b, tmo, c,
666 if ((b & TPM_STS_VALID) && (sc->sc_capabilities &
668 rv = tpm_waitfor_int(sc, b, tmo, c, TPM_STS_VALID_INT);
696 if ((rv = tpm_waitfor_poll(sc, b, to, c)) != 0)
699 if ((b & sc->sc_stat) == TPM_STS_VALID) {
706 if ((sc->sc_stat & b) != b) {
709 sc->sc_stat, TPM_STS_BITS, b, TPM_STS_BITS);
712 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_STS,
724 tpm_tis12_start(struct tpm_softc *sc, int flag)
729 rv = tpm_waitfor(sc, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
730 TPM_READ_TMO, sc->sc_read);
735 if ((rv = tpm_request_locality(sc, 0)) != 0)
738 sc->sc_stat = tpm_status(sc);
739 if (sc->sc_stat & TPM_STS_CMD_READY) {
741 printf("tpm_tis12_start: UIO_WRITE status %b\n", sc->sc_stat,
752 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_STS, TPM_STS_CMD_READY);
753 if ((rv = tpm_waitfor(sc, TPM_STS_CMD_READY, TPM_READY_TMO,
754 sc->sc_write))) {
769 tpm_tis12_read(struct tpm_softc *sc, void *buf, int len, size_t *count,
781 if ((rv = tpm_waitfor(sc, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
782 TPM_READ_TMO, sc->sc_read)))
785 bcnt = tpm_getburst(sc);
791 *p++ = bus_space_read_1(sc->sc_bt, sc->sc_bh, TPM_DATA);
809 tpm_tis12_write(struct tpm_softc *sc, void *buf, int len)
816 printf("tpm_tis12_write: sc %p buf %p len %d\n", sc, buf, len);
819 if ((rv = tpm_request_locality(sc, 0)) != 0)
824 for (r = tpm_getburst(sc); r > 0 && cnt < len - 1; r--) {
825 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_DATA, *p++);
828 if ((rv = tpm_waitfor(sc, TPM_STS_VALID, TPM_READ_TMO, sc))) {
834 sc->sc_stat = tpm_status(sc);
835 if (!(sc->sc_stat & TPM_STS_DATA_EXPECT)) {
838 sc->sc_stat, TPM_STS_BITS);
844 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_DATA, *p++);
847 if ((rv = tpm_waitfor(sc, TPM_STS_VALID, TPM_READ_TMO, sc))) {
853 if ((sc->sc_stat & TPM_STS_DATA_EXPECT) != 0) {
856 sc->sc_stat, TPM_STS_BITS);
870 tpm_tis12_end(struct tpm_softc *sc, int flag, int err)
875 if ((rv = tpm_waitfor(sc, TPM_STS_VALID, TPM_READ_TMO,
876 sc->sc_read)))
880 sc->sc_stat = tpm_status(sc);
881 if (!err && ((sc->sc_stat & TPM_STS_DATA_AVAIL) == TPM_STS_DATA_AVAIL)) {
884 sc->sc_stat, TPM_STS_BITS);
889 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_STS,
893 bus_space_write_1(sc->sc_bt, sc->sc_bh,TPM_ACCESS,
897 sc->sc_stat = tpm_status(sc);
898 if (!err && (sc->sc_stat & TPM_STS_DATA_EXPECT)) {
901 sc->sc_stat, TPM_STS_BITS);
906 bus_space_write_1(sc->sc_bt, sc->sc_bh, TPM_STS,
916 struct tpm_softc *sc = v;
922 r = bus_space_read_4(sc->sc_bt, sc->sc_bh, TPM_INT_STATUS);
934 wakeup(sc);
937 wakeup(sc->sc_write);
940 wakeup(sc->sc_read);
943 wakeup(sc->sc_init);
945 bus_space_write_4(sc->sc_bt, sc->sc_bh, TPM_INT_STATUS, r);
1015 tpm_legacy_init(struct tpm_softc *sc, int irq, const char *name)
1020 if ((i = bus_space_map(sc->sc_batm, tpm_enabled, 2, 0, &sc->sc_bahm))) {
1027 id[i] = tpm_legacy_in(sc->sc_bt, sc->sc_bh, TPM_ID + i);
1037 tpm_legacy_start(struct tpm_softc *sc, int flag)
1047 while (((r = bus_space_read_1(sc->sc_batm, sc->sc_bahm, 1)) &
1049 rv = tsleep(sc, PRIBIO | PCATCH, "legacy_tpm_start",
1062 tpm_legacy_read(struct tpm_softc *sc, void *buf, int len, size_t *count,
1072 !(bus_space_read_1(sc->sc_batm, sc->sc_bahm, 1) &
1078 *p++ = bus_space_read_1(sc->sc_batm, sc->sc_bahm, 0);
1087 tpm_legacy_write(struct tpm_softc *sc, void *buf, int len)
1094 bus_space_write_1(sc->sc_batm, sc->sc_bahm, 1,
1098 bus_space_write_1(sc->sc_batm, sc->sc_bahm, 0, *p++);
1106 tpm_legacy_end(struct tpm_softc *sc, int flag, int rv)
1113 bus_space_write_1(sc->sc_batm, sc->sc_bahm, 1, TPM_LEGACY_ABRT);
1118 while(((r = bus_space_read_1(sc->sc_batm, sc->sc_bahm, 1)) &
1120 rv = tsleep(sc, PRIBIO | PCATCH, "legacy_tpm_end",
1139 struct tpm_softc *sc = TPMSOFTC(dev);
1141 if (!sc)
1144 if (sc->sc_flags & TPM_OPEN)
1147 sc->sc_flags |= TPM_OPEN;
1155 struct tpm_softc *sc = TPMSOFTC(dev);
1157 if (!sc)
1160 if (!(sc->sc_flags & TPM_OPEN))
1163 sc->sc_flags &= ~TPM_OPEN;
1171 struct tpm_softc *sc = TPMSOFTC(dev);
1176 if (!sc)
1180 if ((rv = (sc->sc_start)(sc, UIO_READ))) {
1188 if ((rv = (sc->sc_read)(sc, buf, TPM_HDRSIZE, &cnt, 0))) {
1189 (sc->sc_end)(sc, UIO_READ, rv);
1200 (sc->sc_end)(sc, UIO_READ, rv);
1210 (sc->sc_end)(sc, UIO_READ, rv);
1222 if ((rv = (sc->sc_read)(sc, p, n, NULL, TPM_PARAM_SIZE))) {
1223 (sc->sc_end)(sc, UIO_READ, rv);
1229 (sc->sc_end)(sc, UIO_READ, rv);
1235 rv = (sc->sc_end)(sc, UIO_READ, rv);
1243 struct tpm_softc *sc = TPMSOFTC(dev);
1247 if (!sc)
1262 if ((rv = (sc->sc_start)(sc, UIO_WRITE))) {
1267 if ((rv = (sc->sc_write(sc, buf, n)))) {
1272 rv = (sc->sc_end)(sc, UIO_WRITE, rv);