Lines Matching refs:dc

132 dread(struct dcons_state *dc, void *buf, size_t n, off_t offset)  in dread()  argument
134 switch (dc->type) { in dread()
136 return (pread(dc->fd, buf, n, offset)); in dread()
138 return (kvm_read(dc->kd, offset, buf, n)); in dread()
144 dwrite(struct dcons_state *dc, void *buf, size_t n, off_t offset) in dwrite() argument
146 if ((dc->flags & F_RD_ONLY) != 0) in dwrite()
149 switch (dc->type) { in dwrite()
151 return (pwrite(dc->fd, buf, n, offset)); in dwrite()
153 return (kvm_write(dc->kd, offset, buf, n)); in dwrite()
159 dconschat_reset_target(struct dcons_state *dc, struct dcons_port *p) in dconschat_reset_target() argument
162 if (dc->reset == 0) in dconschat_reset_target()
167 (intmax_t)dc->reset); in dconschat_reset_target()
170 dwrite(dc, (void *)buf, PAGE_SIZE, dc->reset); in dconschat_reset_target()
175 dconschat_suspend(struct dcons_state *dc, struct dcons_port *p) in dconschat_suspend() argument
181 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_suspend()
187 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_suspend()
210 dconschat_fork_gdb(struct dcons_state *dc, struct dcons_port *p) in dconschat_fork_gdb() argument
226 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_fork_gdb()
229 dc->port[DCONS_GDB].sport); in dconschat_fork_gdb()
239 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_fork_gdb()
253 struct dcons_state *dc; in dconschat_cleanup() local
256 dc = ≻ in dconschat_cleanup()
258 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_cleanup()
270 dconschat_get_crom(struct dcons_state *dc) in dconschat_get_crom() argument
281 if (dread(dc, &buf, 4, addr + i) < 0) { in dconschat_get_crom()
326 dc->paddr = ((off_t)hi << 24) | lo; in dconschat_get_crom()
327 dc->reset = ((off_t)reset_hi << 24) | reset_lo; in dconschat_get_crom()
328 if (dc->paddr == 0) in dconschat_get_crom()
335 dconschat_ready(struct dcons_state *dc, int ready, char *reason) in dconschat_ready() argument
340 old = (dc->flags & F_READY) ? 1 : 0; in dconschat_ready()
343 dc->flags |= F_READY; in dconschat_ready()
348 dc->flags &= ~F_READY; in dconschat_ready()
357 dconschat_fetch_header(struct dcons_state *dc) in dconschat_fetch_header() argument
364 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) != 0) { in dconschat_fetch_header()
365 if (dconschat_get_crom(dc)) { in dconschat_fetch_header()
366 dconschat_ready(dc, 0, "get crom failed"); in dconschat_fetch_header()
372 if (dread(dc, &dbuf, DCONS_HEADER_SIZE, dc->paddr) < 0) { in dconschat_fetch_header()
373 dconschat_ready(dc, 0, "read header failed"); in dconschat_fetch_header()
377 if ((dc->flags & F_USE_CROM) !=0) in dconschat_fetch_header()
378 dc->paddr = 0; in dconschat_fetch_header()
380 dconschat_ready(dc, 0, ebuf); in dconschat_fetch_header()
388 dconschat_ready(dc, 0, ebuf); in dconschat_fetch_header()
397 o = &dc->port[j].o; in dconschat_fetch_header()
398 newbuf = dc->paddr + ntohl(dbuf.ooffset[j]); in dconschat_fetch_header()
409 i = &dc->port[j].i; in dconschat_fetch_header()
413 i->buf = dc->paddr + ntohl(dbuf.ioffset[j]); in dconschat_fetch_header()
423 if (IS_CONSOLE(&dc->port[j]) && new && in dconschat_fetch_header()
424 (dc->flags & F_REPLAY) !=0) { in dconschat_fetch_header()
431 dconschat_ready(dc, 1, NULL); in dconschat_fetch_header()
436 dconschat_get_ptr (struct dcons_state *dc) { in dconschat_get_ptr() argument
443 dlen = dread(dc, &ptr, sizeof(ptr), in dconschat_get_ptr()
444 dc->paddr + __offsetof(struct dcons_buf, magic)); in dconschat_get_ptr()
450 dconschat_ready(dc, 0, "get ptr failed"); in dconschat_get_ptr()
454 if ((dc->flags & F_USE_CROM) !=0) in dconschat_get_ptr()
455 dc->paddr = 0; in dconschat_get_ptr()
457 dconschat_ready(dc, 0, ebuf); in dconschat_get_ptr()
462 dc->port[i].optr = ntohl(ptr[i + 1]); in dconschat_get_ptr()
463 dc->port[i].iptr = ntohl(ptr[DCONS_NPORT + i + 1]); in dconschat_get_ptr()
470 dconschat_read_dcons(struct dcons_state *dc, int port, char *buf, int len) in dconschat_read_dcons() argument
477 ch = &dc->port[port].o; in dconschat_read_dcons()
478 ptr = dc->port[port].optr; in dconschat_read_dcons()
527 dlen = dread(dc, buf, rlen, ch->buf + ch->pos); in dconschat_read_dcons()
532 dconschat_ready(dc, 0, "read buffer failed"); in dconschat_read_dcons()
548 dconschat_write_dcons(struct dcons_state *dc, int port, char *buf, int blen) in dconschat_write_dcons() argument
555 ch = &dc->port[port].i; in dconschat_write_dcons()
556 ptr = dc->port[port].iptr; in dconschat_write_dcons()
565 len = dwrite(dc, buf, wlen, ch->buf + ch->pos); in dconschat_write_dcons()
570 dconschat_ready(dc, 0, "write buffer failed"); in dconschat_write_dcons()
586 dc->port[port].iptr = ptr; in dconschat_write_dcons()
591 len = dwrite(dc, &ptr, sizeof(u_int32_t), in dconschat_write_dcons()
592 dc->paddr + __offsetof(struct dcons_buf, iptr[port])); in dconschat_write_dcons()
597 dconschat_ready(dc, 0, "write ptr failed"); in dconschat_write_dcons()
616 dconschat_init_socket(struct dcons_state *dc, int port, char *host, int sport) in dconschat_init_socket() argument
624 p = &dc->port[port]; in dconschat_init_socket()
639 tcgetattr(STDIN_FILENO, &dc->tsave) == 0) { in dconschat_init_socket()
640 dc->traw = dc->tsave; in dconschat_init_socket()
641 cfmakeraw(&dc->traw); in dconschat_init_socket()
642 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_init_socket()
647 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_init_socket()
680 error = kevent(dc->kq, &kev, 1, NULL, 0, &dc->to); in dconschat_init_socket()
686 dconschat_accept_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_accept_socket() argument
704 if (IS_CONSOLE(p) && (dc->flags & F_TELNET) != 0) { in dconschat_accept_socket()
722 while ((len = dconschat_read_dcons(dc, DCONS_GDB, &buf[0], in dconschat_accept_socket()
730 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_accept_socket()
735 dconschat_read_filter(struct dcons_state *dc, struct dcons_port *p, in dconschat_read_filter() argument
744 if ((dc->flags & F_TELNET) != 0) { in dconschat_read_filter()
767 switch (dc->escape_state) { in dconschat_read_filter()
769 if (*sp == dc->escape) { in dconschat_read_filter()
771 dc->escape_state = STATE2; in dconschat_read_filter()
773 dc->escape_state = STATE0; in dconschat_read_filter()
776 dc->escape_state = STATE0; in dconschat_read_filter()
786 dconschat_fork_gdb(dc, p); in dconschat_read_filter()
788 && (dc->reset != 0)) { in dconschat_read_filter()
789 dc->escape_state = STATE3; in dconschat_read_filter()
793 dconschat_suspend(dc, p); in dconschat_read_filter()
796 *dp++ = dc->escape; in dconschat_read_filter()
801 dc->escape_state = STATE0; in dconschat_read_filter()
804 dconschat_reset_target(dc, p); in dconschat_read_filter()
812 dc->escape_state = STATE1; in dconschat_read_filter()
815 if (*sp == CTRL('C') && (dc->flags & F_ALT_BREAK) != 0) { in dconschat_read_filter()
837 dconschat_read_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_read_socket() argument
845 dconschat_read_filter(dc, p, rbuf, len, wbuf, &wlen); in dconschat_read_socket()
847 if (wlen > 0 && (dc->flags & F_READY) != 0) { in dconschat_read_socket()
848 dconschat_write_dcons(dc, p->port, wbuf, wlen); in dconschat_read_socket()
866 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
872 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
879 dconschat_proc_socket(struct dcons_state *dc) in dconschat_proc_socket() argument
885 n = kevent(dc->kq, NULL, 0, elist, NEVENT, &dc->to); in dconschat_proc_socket()
890 dconschat_accept_socket(dc, p); in dconschat_proc_socket()
892 dconschat_read_socket(dc, p); in dconschat_proc_socket()
899 dconschat_proc_dcons(struct dcons_state *dc) in dconschat_proc_dcons() argument
905 err = dconschat_get_ptr(dc); in dconschat_proc_dcons()
911 p = &dc->port[port]; in dconschat_proc_dcons()
914 while ((len = dconschat_read_dcons(dc, port, buf, in dconschat_proc_dcons()
917 if ((err = dconschat_get_ptr(dc))) in dconschat_proc_dcons()
920 if ((dc->flags & F_ONE_SHOT) != 0 && len <= 0) in dconschat_proc_dcons()
927 dconschat_start_session(struct dcons_state *dc) in dconschat_start_session() argument
937 if (((dc->flags & F_READY) == 0) && ++counter > retry_unit) { in dconschat_start_session()
946 dconschat_fetch_header(dc); in dconschat_start_session()
948 if ((dc->flags & F_READY) != 0) { in dconschat_start_session()
952 dconschat_proc_dcons(dc); in dconschat_start_session()
954 dconschat_proc_socket(dc); in dconschat_start_session()
989 struct dcons_state *dc; in main() local
998 dc = &sc; in main()
999 dc->flags |= USE_CROM ? F_USE_CROM : 0; in main()
1006 dc->escape = KEY_TILDE; in main()
1011 dc->paddr = strtoull(optarg, NULL, 0); in main()
1012 dc->flags &= ~F_USE_CROM; in main()
1015 dc->flags |= F_ALT_BREAK; in main()
1018 dc->escape = optarg[0]; in main()
1026 dc->flags |= F_REPLAY; in main()
1034 dc->type = TYPE_FW; in main()
1058 dc->flags |= F_RD_ONLY; in main()
1061 dc->flags |= F_TELNET; in main()
1064 dc->flags |= F_ONE_SHOT | F_REPLAY; in main()
1070 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) == 0) { in main()
1087 switch (dc->type) { in main()
1093 dc->fd = open(devname, O_RDWR); in main()
1094 if (dc->fd >= 0) in main()
1099 error = ioctl(dc->fd, FW_SDEUI64, &eui); in main()
1108 dc->kd = kvm_open(system, core, NULL, in main()
1109 (dc->flags & F_RD_ONLY) ? O_RDONLY : O_RDWR, "dconschat"); in main()
1110 if (dc->kd == NULL) in main()
1113 if (kvm_nlist(dc->kd, nl) < 0) in main()
1114 errx(1, "kvm_nlist: %s", kvm_geterr(dc->kd)); in main()
1116 if (kvm_read(dc->kd, nl[0].n_value, &dcons_buf, in main()
1118 errx(1, "kvm_read: %s", kvm_geterr(dc->kd)); in main()
1119 dc->paddr = (uintptr_t)dcons_buf; in main()
1121 printf("dcons_buf: 0x%x\n", (uint)dc->paddr); in main()
1125 dconschat_fetch_header(dc); in main()
1128 dc->kq = kqueue(); in main()
1130 dc->to.tv_sec = 1; in main()
1131 dc->to.tv_nsec = 0; in main()
1133 dc->to.tv_sec = 0; in main()
1134 dc->to.tv_nsec = 1000 * 1000 * 1000 / poll_hz; in main()
1136 dc->zero.tv_sec = 0; in main()
1137 dc->zero.tv_nsec = 0; in main()
1139 dconschat_init_socket(dc, i, in main()
1142 dconschat_start_session(dc); in main()
1145 freeaddrinfo(dc->port[i].res); in main()