Lines Matching refs:dc
133 dread(struct dcons_state *dc, void *buf, size_t n, off_t offset) in dread() argument
135 switch (dc->type) { in dread()
137 return (pread(dc->fd, buf, n, offset)); in dread()
139 return (kvm_read(dc->kd, offset, buf, n)); in dread()
145 dwrite(struct dcons_state *dc, void *buf, size_t n, off_t offset) in dwrite() argument
147 if ((dc->flags & F_RD_ONLY) != 0) in dwrite()
150 switch (dc->type) { in dwrite()
152 return (pwrite(dc->fd, buf, n, offset)); in dwrite()
154 return (kvm_write(dc->kd, offset, buf, n)); in dwrite()
160 dconschat_reset_target(struct dcons_state *dc, struct dcons_port *p) in dconschat_reset_target() argument
163 if (dc->reset == 0) in dconschat_reset_target()
168 (intmax_t)dc->reset); in dconschat_reset_target()
171 dwrite(dc, (void *)buf, PAGE_SIZE, dc->reset); in dconschat_reset_target()
176 dconschat_suspend(struct dcons_state *dc, struct dcons_port *p) in dconschat_suspend() argument
182 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_suspend()
188 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_suspend()
211 dconschat_fork_gdb(struct dcons_state *dc, struct dcons_port *p) in dconschat_fork_gdb() argument
227 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_fork_gdb()
230 dc->port[DCONS_GDB].sport); in dconschat_fork_gdb()
240 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_fork_gdb()
254 struct dcons_state *dc; in dconschat_cleanup() local
257 dc = ≻ in dconschat_cleanup()
259 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave); in dconschat_cleanup()
271 dconschat_get_crom(struct dcons_state *dc) in dconschat_get_crom() argument
282 if (dread(dc, &buf, 4, addr + i) < 0) { in dconschat_get_crom()
327 dc->paddr = ((off_t)hi << 24) | lo; in dconschat_get_crom()
328 dc->reset = ((off_t)reset_hi << 24) | reset_lo; in dconschat_get_crom()
329 if (dc->paddr == 0) in dconschat_get_crom()
336 dconschat_ready(struct dcons_state *dc, int ready, char *reason) in dconschat_ready() argument
341 old = (dc->flags & F_READY) ? 1 : 0; in dconschat_ready()
344 dc->flags |= F_READY; in dconschat_ready()
349 dc->flags &= ~F_READY; in dconschat_ready()
358 dconschat_fetch_header(struct dcons_state *dc) in dconschat_fetch_header() argument
365 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) != 0) { in dconschat_fetch_header()
366 if (dconschat_get_crom(dc)) { in dconschat_fetch_header()
367 dconschat_ready(dc, 0, "get crom failed"); in dconschat_fetch_header()
373 if (dread(dc, &dbuf, DCONS_HEADER_SIZE, dc->paddr) < 0) { in dconschat_fetch_header()
374 dconschat_ready(dc, 0, "read header failed"); in dconschat_fetch_header()
378 if ((dc->flags & F_USE_CROM) !=0) in dconschat_fetch_header()
379 dc->paddr = 0; in dconschat_fetch_header()
381 dconschat_ready(dc, 0, ebuf); in dconschat_fetch_header()
393 dconschat_ready(dc, 0, ebuf); in dconschat_fetch_header()
402 o = &dc->port[j].o; in dconschat_fetch_header()
403 newbuf = dc->paddr + ntohl(dbuf.ooffset[j]); in dconschat_fetch_header()
414 i = &dc->port[j].i; in dconschat_fetch_header()
418 i->buf = dc->paddr + ntohl(dbuf.ioffset[j]); in dconschat_fetch_header()
433 if (IS_CONSOLE(&dc->port[j]) && new && in dconschat_fetch_header()
434 (dc->flags & F_REPLAY) !=0) { in dconschat_fetch_header()
441 dconschat_ready(dc, 1, NULL); in dconschat_fetch_header()
446 dconschat_get_ptr (struct dcons_state *dc) { in dconschat_get_ptr() argument
453 dlen = dread(dc, &ptr, sizeof(ptr), in dconschat_get_ptr()
454 dc->paddr + __offsetof(struct dcons_buf, magic)); in dconschat_get_ptr()
460 dconschat_ready(dc, 0, "get ptr failed"); in dconschat_get_ptr()
464 if ((dc->flags & F_USE_CROM) !=0) in dconschat_get_ptr()
465 dc->paddr = 0; in dconschat_get_ptr()
467 dconschat_ready(dc, 0, ebuf); in dconschat_get_ptr()
472 dc->port[i].optr = ntohl(ptr[i + 1]); in dconschat_get_ptr()
473 dc->port[i].iptr = ntohl(ptr[DCONS_NPORT + i + 1]); in dconschat_get_ptr()
480 dconschat_read_dcons(struct dcons_state *dc, int port, char *buf, int len) in dconschat_read_dcons() argument
487 ch = &dc->port[port].o; in dconschat_read_dcons()
488 ptr = dc->port[port].optr; in dconschat_read_dcons()
537 dlen = dread(dc, buf, rlen, ch->buf + ch->pos); in dconschat_read_dcons()
542 dconschat_ready(dc, 0, "read buffer failed"); in dconschat_read_dcons()
558 dconschat_write_dcons(struct dcons_state *dc, int port, char *buf, int blen) in dconschat_write_dcons() argument
565 ch = &dc->port[port].i; in dconschat_write_dcons()
566 ptr = dc->port[port].iptr; in dconschat_write_dcons()
575 len = dwrite(dc, buf, wlen, ch->buf + ch->pos); in dconschat_write_dcons()
580 dconschat_ready(dc, 0, "write buffer failed"); in dconschat_write_dcons()
596 dc->port[port].iptr = ptr; in dconschat_write_dcons()
601 len = dwrite(dc, &ptr, sizeof(u_int32_t), in dconschat_write_dcons()
602 dc->paddr + __offsetof(struct dcons_buf, iptr[port])); in dconschat_write_dcons()
607 dconschat_ready(dc, 0, "write ptr failed"); in dconschat_write_dcons()
626 dconschat_init_socket(struct dcons_state *dc, int port, char *host, int sport) in dconschat_init_socket() argument
634 p = &dc->port[port]; in dconschat_init_socket()
649 tcgetattr(STDIN_FILENO, &dc->tsave) == 0) { in dconschat_init_socket()
650 dc->traw = dc->tsave; in dconschat_init_socket()
651 cfmakeraw(&dc->traw); in dconschat_init_socket()
652 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw); in dconschat_init_socket()
657 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_init_socket()
690 error = kevent(dc->kq, &kev, 1, NULL, 0, &dc->to); in dconschat_init_socket()
697 dconschat_accept_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_accept_socket() argument
715 if (IS_CONSOLE(p) && (dc->flags & F_TELNET) != 0) { in dconschat_accept_socket()
733 while ((len = dconschat_read_dcons(dc, DCONS_GDB, &buf[0], in dconschat_accept_socket()
741 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_accept_socket()
746 dconschat_read_filter(struct dcons_state *dc, struct dcons_port *p, in dconschat_read_filter() argument
755 if ((dc->flags & F_TELNET) != 0) { in dconschat_read_filter()
778 switch (dc->escape_state) { in dconschat_read_filter()
780 if (*sp == dc->escape) { in dconschat_read_filter()
782 dc->escape_state = STATE2; in dconschat_read_filter()
784 dc->escape_state = STATE0; in dconschat_read_filter()
787 dc->escape_state = STATE0; in dconschat_read_filter()
797 dconschat_fork_gdb(dc, p); in dconschat_read_filter()
799 && (dc->reset != 0)) { in dconschat_read_filter()
800 dc->escape_state = STATE3; in dconschat_read_filter()
804 dconschat_suspend(dc, p); in dconschat_read_filter()
807 *dp++ = dc->escape; in dconschat_read_filter()
812 dc->escape_state = STATE0; in dconschat_read_filter()
815 dconschat_reset_target(dc, p); in dconschat_read_filter()
823 dc->escape_state = STATE1; in dconschat_read_filter()
826 if (*sp == CTRL('C') && (dc->flags & F_ALT_BREAK) != 0) { in dconschat_read_filter()
848 dconschat_read_socket(struct dcons_state *dc, struct dcons_port *p) in dconschat_read_socket() argument
856 dconschat_read_filter(dc, p, rbuf, len, wbuf, &wlen); in dconschat_read_socket()
858 if (wlen > 0 && (dc->flags & F_READY) != 0) { in dconschat_read_socket()
859 dconschat_write_dcons(dc, p->port, wbuf, wlen); in dconschat_read_socket()
877 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
883 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero); in dconschat_read_socket()
890 dconschat_proc_socket(struct dcons_state *dc) in dconschat_proc_socket() argument
896 n = kevent(dc->kq, NULL, 0, elist, NEVENT, &dc->to); in dconschat_proc_socket()
901 dconschat_accept_socket(dc, p); in dconschat_proc_socket()
903 dconschat_read_socket(dc, p); in dconschat_proc_socket()
910 dconschat_proc_dcons(struct dcons_state *dc) in dconschat_proc_dcons() argument
916 err = dconschat_get_ptr(dc); in dconschat_proc_dcons()
922 p = &dc->port[port]; in dconschat_proc_dcons()
925 while ((len = dconschat_read_dcons(dc, port, buf, in dconschat_proc_dcons()
928 if ((err = dconschat_get_ptr(dc))) in dconschat_proc_dcons()
931 if ((dc->flags & F_ONE_SHOT) != 0 && len <= 0) in dconschat_proc_dcons()
938 dconschat_start_session(struct dcons_state *dc) in dconschat_start_session() argument
948 if (((dc->flags & F_READY) == 0) && ++counter > retry_unit) { in dconschat_start_session()
957 dconschat_fetch_header(dc); in dconschat_start_session()
959 if ((dc->flags & F_READY) != 0) { in dconschat_start_session()
963 dconschat_proc_dcons(dc); in dconschat_start_session()
965 dconschat_proc_socket(dc); in dconschat_start_session()
1000 struct dcons_state *dc; in main() local
1009 dc = ≻ in main()
1010 dc->flags |= USE_CROM ? F_USE_CROM : 0; in main()
1017 dc->escape = KEY_TILDE; in main()
1022 dc->paddr = strtoull(optarg, NULL, 0); in main()
1023 dc->flags &= ~F_USE_CROM; in main()
1026 dc->flags |= F_ALT_BREAK; in main()
1029 dc->escape = optarg[0]; in main()
1037 dc->flags |= F_REPLAY; in main()
1045 dc->type = TYPE_FW; in main()
1069 dc->flags |= F_RD_ONLY; in main()
1072 dc->flags |= F_TELNET; in main()
1075 dc->flags |= F_ONE_SHOT | F_REPLAY; in main()
1081 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) == 0) { in main()
1098 switch (dc->type) { in main()
1104 dc->fd = open(devname, O_RDWR); in main()
1105 if (dc->fd >= 0) in main()
1110 error = ioctl(dc->fd, FW_SDEUI64, &eui); in main()
1119 dc->kd = kvm_open(system, core, NULL, in main()
1120 (dc->flags & F_RD_ONLY) ? O_RDONLY : O_RDWR, "dconschat"); in main()
1121 if (dc->kd == NULL) in main()
1124 if (kvm_nlist(dc->kd, nl) < 0) in main()
1125 errx(1, "kvm_nlist: %s", kvm_geterr(dc->kd)); in main()
1127 if (kvm_read(dc->kd, nl[0].n_value, &dcons_buf, in main()
1129 errx(1, "kvm_read: %s", kvm_geterr(dc->kd)); in main()
1130 dc->paddr = (uintptr_t)dcons_buf; in main()
1132 printf("dcons_buf: 0x%x\n", (uint)dc->paddr); in main()
1136 dconschat_fetch_header(dc); in main()
1139 dc->kq = kqueue(); in main()
1141 dc->to.tv_sec = 1; in main()
1142 dc->to.tv_nsec = 0; in main()
1144 dc->to.tv_sec = 0; in main()
1145 dc->to.tv_nsec = 1000 * 1000 * 1000 / poll_hz; in main()
1147 dc->zero.tv_sec = 0; in main()
1148 dc->zero.tv_nsec = 0; in main()
1150 dconschat_init_socket(dc, i, in main()
1153 dconschat_start_session(dc); in main()
1156 freeaddrinfo(dc->port[i].res); in main()