diff options
author | simokawa <simokawa@FreeBSD.org> | 2008-03-05 01:30:48 +0000 |
---|---|---|
committer | simokawa <simokawa@FreeBSD.org> | 2008-03-05 01:30:48 +0000 |
commit | ed2af560699691d50dc3a8de204f01066be5c2d2 (patch) | |
tree | 2644170d619fc2d1794d3b31a74b061e4f092228 | |
parent | 904f9ecb6d89c5d2765813f6571163cc6437ac05 (diff) | |
download | FreeBSD-src-ed2af560699691d50dc3a8de204f01066be5c2d2.zip FreeBSD-src-ed2af560699691d50dc3a8de204f01066be5c2d2.tar.gz |
- add '-f' option to force root node.
- fix byte order in read_write_quad()
- show hostnames in the list
- fix typo in manpage
MFC after: 1 week
-rw-r--r-- | usr.sbin/fwcontrol/fwcontrol.8 | 7 | ||||
-rw-r--r-- | usr.sbin/fwcontrol/fwcontrol.c | 24 |
2 files changed, 23 insertions, 8 deletions
diff --git a/usr.sbin/fwcontrol/fwcontrol.8 b/usr.sbin/fwcontrol/fwcontrol.8 index 7d9ebcf..758a730 100644 --- a/usr.sbin/fwcontrol/fwcontrol.8 +++ b/usr.sbin/fwcontrol/fwcontrol.8 @@ -39,6 +39,7 @@ .Op Fl o Ar node .Op Fl s Ar node .Op Fl l Ar file +.Op Fl f Ar node .Op Fl g Ar gap_count .Op Fl b Ar pri_req .Op Fl M Ar mode @@ -77,6 +78,10 @@ Write to the register on the node. .It Fl l Ar file Load hex dump file of the configuration ROM and parse it. +.It Fl f Ar node +Force specified +.Ar node +to be the root node on the next bus reset. .It Fl g Ar gap_count Broadcast .Ar gap_count @@ -98,7 +103,7 @@ an error complaining about "format 0x20", try to force the "mpeg" mode. .It Fl R Ar filename Receive DV or MPEG TS stream and dump it to a file. Use Ctrl-C to stop the receiving. -Some DV cameras seem not to send the stream if a bus manager exits. +Some DV cameras seem not to send the stream if a bus manager exists. If you cannot get the stream, try the following commands: .Bd -literal -offset indent sysctl hw.firewire.try_bmr=0 diff --git a/usr.sbin/fwcontrol/fwcontrol.c b/usr.sbin/fwcontrol/fwcontrol.c index de4206e..d7c5288 100644 --- a/usr.sbin/fwcontrol/fwcontrol.c +++ b/usr.sbin/fwcontrol/fwcontrol.c @@ -64,10 +64,12 @@ static void usage(void) { fprintf(stderr, - "fwcontrol [-u bus_num] [-rt] [-g gap_count] [-o node] " + "fwcontrol [-u bus_num] [-rt] [-f node] [-g gap_count] " + "[-o node] " "[-b pri_req] [-c node] [-d node] [-l file] " "[-R file] [-S file] [-m target]\n" "\t-u: specify bus number\n" + "\t-f: broadcast force_root by phy_config packet\n" "\t-g: broadcast gap_count by phy_config packet\n" "\t-o: send link-on packet to the node\n" "\t-s: write RESET_START register on the node\n" @@ -153,20 +155,23 @@ list_dev(int fd) struct fw_devlstreq *data; struct fw_devinfo *devinfo; struct eui64 eui; - char addr[EUI64_SIZ]; + char addr[EUI64_SIZ], hostname[40]; int i; data = get_dev(fd); printf("%d devices (info_len=%d)\n", data->n, data->info_len); - printf("node EUI64 status\n"); + printf("node EUI64 status hostname\n"); for (i = 0; i < data->info_len; i++) { devinfo = &data->dev[i]; fweui2eui64(&devinfo->eui, &eui); eui64_ntoa(&eui, addr, sizeof(addr)); - printf("%4d %s %6d\n", + if (eui64_ntohost(hostname, sizeof(hostname), &eui)) + hostname[0] = 0; + printf("%4d %s %6d %s\n", (devinfo->status || i == 0) ? devinfo->dst : -1, addr, - devinfo->status + devinfo->status, + hostname ); } free((void *)data); @@ -198,7 +203,7 @@ read_write_quad(int fd, struct fw_eui64 eui, u_int32_t addr_lo, int readmode, u_ qld = (u_int32_t *)&asyreq->pkt; if (!readmode) - asyreq->pkt.mode.wreqq.data = data; + asyreq->pkt.mode.wreqq.data = htonl(data); if (ioctl(fd, FW_ASYREQ, asyreq) < 0) { err(1, "ioctl"); @@ -676,7 +681,7 @@ main(int argc, char **argv) list_dev(fd); } - while ((ch = getopt(argc, argv, "M:g:m:o:s:b:prtc:d:l:u:R:S:")) != -1) + while ((ch = getopt(argc, argv, "M:f:g:m:o:s:b:prtc:d:l:u:R:S:")) != -1) switch(ch) { case 'b': tmp = strtol(optarg, NULL, 0); @@ -697,6 +702,11 @@ main(int argc, char **argv) get_crom(fd, tmp, crom_buf, len); dump_crom(crom_buf); break; + case 'f': + tmp = strtol(optarg, NULL, 0); + open_dev(&fd, devbase); + send_phy_config(fd, tmp, -1); + break; case 'g': tmp = strtol(optarg, NULL, 0); open_dev(&fd, devbase); |