Lines Matching full: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()
529 dlen = dread(dc, buf, rlen, ch->buf + ch->pos); in dconschat_read_dcons()
534 dconschat_ready(dc, 0, "read buffer failed"); in dconschat_read_dcons()
550 dconschat_write_dcons(struct dcons_state *dc, int port, char *buf, int blen) in dconschat_write_dcons() argument
557 ch = &dc->port[port].i; in dconschat_write_dcons()
558 ptr = dc->port[port].iptr; in dconschat_write_dcons()
567 len = dwrite(dc, buf, wlen, ch->buf + ch->pos); in dconschat_write_dcons()
572 dconschat_ready(dc, 0, "write buffer failed"); in dconschat_write_dcons()
588 dc->port[port].iptr = ptr; in dconschat_write_dcons()
593 len = dwrite(dc, &ptr, sizeof(u_int32_t), in dconschat_write_dcons()
594 dc->paddr + __offsetof(struct dcons_buf, iptr[port])); in dconschat_write_dcons()
599 dconschat_ready(dc, 0, "write ptr failed"); in dconschat_write_dcons()
618 dconschat_init_socket(struct dcons_state *dc, int port, char *host, int sport) in dconschat_init_socket() argument
626 p = &dc->port[port]; in dconschat_init_socket()
641 tcgetattr(STDIN_FILENO, &dc->tsave) == 0) { in dconschat_init_socket()
642 dc->traw = dc->tsave; in dconschat_init_socket()
643 cfmakeraw(&dc->traw); in dconschat_init_socket()
644 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_init_socket()
649 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_init_socket()
682 error = kevent(dc->kq, &kev, 1, NULL, 0, &dc->to); in dconschat_init_socket()
688 dconschat_accept_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_accept_socket() argument
706 if (IS_CONSOLE(p) && (dc->flags & F_TELNET) != 0) { in dconschat_accept_socket()
724 while ((len = dconschat_read_dcons(dc, DCONS_GDB, &buf[0], in dconschat_accept_socket()
732 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_accept_socket()
737 dconschat_read_filter(struct dcons_state *dc, struct dcons_port *p, in dconschat_read_filter() argument
746 if ((dc->flags & F_TELNET) != 0) { in dconschat_read_filter()
769 switch (dc->escape_state) { in dconschat_read_filter()
771 if (*sp == dc->escape) { in dconschat_read_filter()
773 dc->escape_state = STATE2; in dconschat_read_filter()
775 dc->escape_state = STATE0; in dconschat_read_filter()
778 dc->escape_state = STATE0; in dconschat_read_filter()
788 dconschat_fork_gdb(dc, p); in dconschat_read_filter()
790 && (dc->reset != 0)) { in dconschat_read_filter()
791 dc->escape_state = STATE3; in dconschat_read_filter()
795 dconschat_suspend(dc, p); in dconschat_read_filter()
798 *dp++ = dc->escape; in dconschat_read_filter()
803 dc->escape_state = STATE0; in dconschat_read_filter()
806 dconschat_reset_target(dc, p); in dconschat_read_filter()
814 dc->escape_state = STATE1; in dconschat_read_filter()
817 if (*sp == CTRL('C') && (dc->flags & F_ALT_BREAK) != 0) { in dconschat_read_filter()
839 dconschat_read_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_read_socket() argument
847 dconschat_read_filter(dc, p, rbuf, len, wbuf, &wlen); in dconschat_read_socket()
849 if (wlen > 0 && (dc->flags & F_READY) != 0) { in dconschat_read_socket()
850 dconschat_write_dcons(dc, p->port, wbuf, wlen); in dconschat_read_socket()
868 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
874 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
881 dconschat_proc_socket(struct dcons_state *dc) in dconschat_proc_socket() argument
887 n = kevent(dc->kq, NULL, 0, elist, NEVENT, &dc->to); in dconschat_proc_socket()
892 dconschat_accept_socket(dc, p); in dconschat_proc_socket()
894 dconschat_read_socket(dc, p); in dconschat_proc_socket()
901 dconschat_proc_dcons(struct dcons_state *dc) in dconschat_proc_dcons() argument
907 err = dconschat_get_ptr(dc); in dconschat_proc_dcons()
913 p = &dc->port[port]; in dconschat_proc_dcons()
916 while ((len = dconschat_read_dcons(dc, port, buf, in dconschat_proc_dcons()
919 if ((err = dconschat_get_ptr(dc))) in dconschat_proc_dcons()
922 if ((dc->flags & F_ONE_SHOT) != 0 && len <= 0) in dconschat_proc_dcons()
929 dconschat_start_session(struct dcons_state *dc) in dconschat_start_session() argument
939 if (((dc->flags & F_READY) == 0) && ++counter > retry_unit) { in dconschat_start_session()
948 dconschat_fetch_header(dc); in dconschat_start_session()
950 if ((dc->flags & F_READY) != 0) { in dconschat_start_session()
954 dconschat_proc_dcons(dc); in dconschat_start_session()
956 dconschat_proc_socket(dc); in dconschat_start_session()
991 struct dcons_state *dc; in main() local
1000 dc = ≻ in main()
1001 dc->flags |= USE_CROM ? F_USE_CROM : 0; in main()
1008 dc->escape = KEY_TILDE; in main()
1013 dc->paddr = strtoull(optarg, NULL, 0); in main()
1014 dc->flags &= ~F_USE_CROM; in main()
1017 dc->flags |= F_ALT_BREAK; in main()
1020 dc->escape = optarg[0]; in main()
1028 dc->flags |= F_REPLAY; in main()
1036 dc->type = TYPE_FW; in main()
1060 dc->flags |= F_RD_ONLY; in main()
1063 dc->flags |= F_TELNET; in main()
1066 dc->flags |= F_ONE_SHOT | F_REPLAY; in main()
1072 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) == 0) { in main()
1089 switch (dc->type) { in main()
1095 dc->fd = open(devname, O_RDWR); in main()
1096 if (dc->fd >= 0) in main()
1101 error = ioctl(dc->fd, FW_SDEUI64, &eui); in main()
1110 dc->kd = kvm_open(system, core, NULL, in main()
1111 (dc->flags & F_RD_ONLY) ? O_RDONLY : O_RDWR, "dconschat"); in main()
1112 if (dc->kd == NULL) in main()
1115 if (kvm_nlist(dc->kd, nl) < 0) in main()
1116 errx(1, "kvm_nlist: %s", kvm_geterr(dc->kd)); in main()
1118 if (kvm_read(dc->kd, nl[0].n_value, &dcons_buf, in main()
1120 errx(1, "kvm_read: %s", kvm_geterr(dc->kd)); in main()
1121 dc->paddr = (uintptr_t)dcons_buf; in main()
1123 printf("dcons_buf: 0x%x\n", (uint)dc->paddr); in main()
1127 dconschat_fetch_header(dc); in main()
1130 dc->kq = kqueue(); in main()
1132 dc->to.tv_sec = 1; in main()
1133 dc->to.tv_nsec = 0; in main()
1135 dc->to.tv_sec = 0; in main()
1136 dc->to.tv_nsec = 1000 * 1000 * 1000 / poll_hz; in main()
1138 dc->zero.tv_sec = 0; in main()
1139 dc->zero.tv_nsec = 0; in main()
1141 dconschat_init_socket(dc, i, in main()
1144 dconschat_start_session(dc); in main()
1147 freeaddrinfo(dc->port[i].res); in main()