Lines Matching defs:dc

132 dread(struct dcons_state *dc, void *buf, size_t n, off_t offset)
134 switch (dc->type) {
136 return (pread(dc->fd, buf, n, offset));
138 return (kvm_read(dc->kd, offset, buf, n));
144 dwrite(struct dcons_state *dc, void *buf, size_t n, off_t offset)
146 if ((dc->flags & F_RD_ONLY) != 0)
149 switch (dc->type) {
151 return (pwrite(dc->fd, buf, n, offset));
153 return (kvm_write(dc->kd, offset, buf, n));
159 dconschat_reset_target(struct dcons_state *dc, struct dcons_port *p)
162 if (dc->reset == 0)
167 (intmax_t)dc->reset);
170 dwrite(dc, (void *)buf, PAGE_SIZE, dc->reset);
175 dconschat_suspend(struct dcons_state *dc, struct dcons_port *p)
181 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave);
187 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw);
210 dconschat_fork_gdb(struct dcons_state *dc, struct dcons_port *p)
226 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave);
229 dc->port[DCONS_GDB].sport);
239 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw);
253 struct dcons_state *dc;
256 dc = ≻
258 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->tsave);
270 dconschat_get_crom(struct dcons_state *dc)
281 if (dread(dc, &buf, 4, addr + i) < 0) {
326 dc->paddr = ((off_t)hi << 24) | lo;
327 dc->reset = ((off_t)reset_hi << 24) | reset_lo;
328 if (dc->paddr == 0)
335 dconschat_ready(struct dcons_state *dc, int ready, char *reason)
340 old = (dc->flags & F_READY) ? 1 : 0;
343 dc->flags |= F_READY;
348 dc->flags &= ~F_READY;
357 dconschat_fetch_header(struct dcons_state *dc)
364 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) != 0) {
365 if (dconschat_get_crom(dc)) {
366 dconschat_ready(dc, 0, "get crom failed");
372 if (dread(dc, &dbuf, DCONS_HEADER_SIZE, dc->paddr) < 0) {
373 dconschat_ready(dc, 0, "read header failed");
377 if ((dc->flags & F_USE_CROM) !=0)
378 dc->paddr = 0;
380 dconschat_ready(dc, 0, ebuf);
388 dconschat_ready(dc, 0, ebuf);
397 o = &dc->port[j].o;
398 newbuf = dc->paddr + ntohl(dbuf.ooffset[j]);
409 i = &dc->port[j].i;
413 i->buf = dc->paddr + ntohl(dbuf.ioffset[j]);
423 if (IS_CONSOLE(&dc->port[j]) && new &&
424 (dc->flags & F_REPLAY) !=0) {
431 dconschat_ready(dc, 1, NULL);
436 dconschat_get_ptr (struct dcons_state *dc) {
443 dlen = dread(dc, &ptr, sizeof(ptr),
444 dc->paddr + __offsetof(struct dcons_buf, magic));
450 dconschat_ready(dc, 0, "get ptr failed");
454 if ((dc->flags & F_USE_CROM) !=0)
455 dc->paddr = 0;
457 dconschat_ready(dc, 0, ebuf);
462 dc->port[i].optr = ntohl(ptr[i + 1]);
463 dc->port[i].iptr = ntohl(ptr[DCONS_NPORT + i + 1]);
470 dconschat_read_dcons(struct dcons_state *dc, int port, char *buf, int len)
477 ch = &dc->port[port].o;
478 ptr = dc->port[port].optr;
529 dlen = dread(dc, buf, rlen, ch->buf + ch->pos);
534 dconschat_ready(dc, 0, "read buffer failed");
550 dconschat_write_dcons(struct dcons_state *dc, int port, char *buf, int blen)
557 ch = &dc->port[port].i;
558 ptr = dc->port[port].iptr;
567 len = dwrite(dc, buf, wlen, ch->buf + ch->pos);
572 dconschat_ready(dc, 0, "write buffer failed");
588 dc->port[port].iptr = ptr;
593 len = dwrite(dc, &ptr, sizeof(u_int32_t),
594 dc->paddr + __offsetof(struct dcons_buf, iptr[port]));
599 dconschat_ready(dc, 0, "write ptr failed");
618 dconschat_init_socket(struct dcons_state *dc, int port, char *host, int sport)
626 p = &dc->port[port];
641 tcgetattr(STDIN_FILENO, &dc->tsave) == 0) {
642 dc->traw = dc->tsave;
643 cfmakeraw(&dc->traw);
644 tcsetattr(STDIN_FILENO, TCSADRAIN, &dc->traw);
649 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero);
682 error = kevent(dc->kq, &kev, 1, NULL, 0, &dc->to);
688 dconschat_accept_socket(struct dcons_state *dc, struct dcons_port *p)
706 if (IS_CONSOLE(p) && (dc->flags & F_TELNET) != 0) {
724 while ((len = dconschat_read_dcons(dc, DCONS_GDB, &buf[0],
732 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero);
737 dconschat_read_filter(struct dcons_state *dc, struct dcons_port *p,
746 if ((dc->flags & F_TELNET) != 0) {
769 switch (dc->escape_state) {
771 if (*sp == dc->escape) {
773 dc->escape_state = STATE2;
775 dc->escape_state = STATE0;
778 dc->escape_state = STATE0;
788 dconschat_fork_gdb(dc, p);
790 && (dc->reset != 0)) {
791 dc->escape_state = STATE3;
795 dconschat_suspend(dc, p);
798 *dp++ = dc->escape;
803 dc->escape_state = STATE0;
806 dconschat_reset_target(dc, p);
814 dc->escape_state = STATE1;
817 if (*sp == CTRL('C') && (dc->flags & F_ALT_BREAK) != 0) {
839 dconschat_read_socket(struct dcons_state *dc, struct dcons_port *p)
847 dconschat_read_filter(dc, p, rbuf, len, wbuf, &wlen);
849 if (wlen > 0 && (dc->flags & F_READY) != 0) {
850 dconschat_write_dcons(dc, p->port, wbuf, wlen);
868 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero);
874 kevent(dc->kq, &kev, 1, NULL, 0, &dc->zero);
881 dconschat_proc_socket(struct dcons_state *dc)
887 n = kevent(dc->kq, NULL, 0, elist, NEVENT, &dc->to);
892 dconschat_accept_socket(dc, p);
894 dconschat_read_socket(dc, p);
901 dconschat_proc_dcons(struct dcons_state *dc)
907 err = dconschat_get_ptr(dc);
913 p = &dc->port[port];
916 while ((len = dconschat_read_dcons(dc, port, buf,
919 if ((err = dconschat_get_ptr(dc)))
922 if ((dc->flags & F_ONE_SHOT) != 0 && len <= 0)
929 dconschat_start_session(struct dcons_state *dc)
939 if (((dc->flags & F_READY) == 0) && ++counter > retry_unit) {
948 dconschat_fetch_header(dc);
950 if ((dc->flags & F_READY) != 0) {
954 dconschat_proc_dcons(dc);
956 dconschat_proc_socket(dc);
991 struct dcons_state *dc;
1000 dc = &sc;
1001 dc->flags |= USE_CROM ? F_USE_CROM : 0;
1008 dc->escape = KEY_TILDE;
1013 dc->paddr = strtoull(optarg, NULL, 0);
1014 dc->flags &= ~F_USE_CROM;
1017 dc->flags |= F_ALT_BREAK;
1020 dc->escape = optarg[0];
1028 dc->flags |= F_REPLAY;
1036 dc->type = TYPE_FW;
1060 dc->flags |= F_RD_ONLY;
1063 dc->flags |= F_TELNET;
1066 dc->flags |= F_ONE_SHOT | F_REPLAY;
1072 if (dc->paddr == 0 && (dc->flags & F_USE_CROM) == 0) {
1089 switch (dc->type) {
1095 dc->fd = open(devname, O_RDWR);
1096 if (dc->fd >= 0)
1101 error = ioctl(dc->fd, FW_SDEUI64, &eui);
1110 dc->kd = kvm_open(system, core, NULL,
1111 (dc->flags & F_RD_ONLY) ? O_RDONLY : O_RDWR, "dconschat");
1112 if (dc->kd == NULL)
1115 if (kvm_nlist(dc->kd, nl) < 0)
1116 errx(1, "kvm_nlist: %s", kvm_geterr(dc->kd));
1118 if (kvm_read(dc->kd, nl[0].n_value, &dcons_buf,
1120 errx(1, "kvm_read: %s", kvm_geterr(dc->kd));
1121 dc->paddr = (uintptr_t)dcons_buf;
1123 printf("dcons_buf: 0x%x\n", (uint)dc->paddr);
1127 dconschat_fetch_header(dc);
1130 dc->kq = kqueue();
1132 dc->to.tv_sec = 1;
1133 dc->to.tv_nsec = 0;
1135 dc->to.tv_sec = 0;
1136 dc->to.tv_nsec = 1000 * 1000 * 1000 / poll_hz;
1138 dc->zero.tv_sec = 0;
1139 dc->zero.tv_nsec = 0;
1141 dconschat_init_socket(dc, i,
1144 dconschat_start_session(dc);
1147 freeaddrinfo(dc->port[i].res);