1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * (C) Copyright 2019
4 * Ramon Fried <rfried.dev@gmail.com>
5 */
6
7#include <common.h>
8#include <command.h>
9#include <net.h>
10#include <net/pcap.h>
11
12static int do_pcap_init(struct cmd_tbl *cmdtp, int flag, int argc,
13			char *const argv[])
14{
15	phys_addr_t addr;
16	unsigned int size;
17
18	if (argc != 3)
19		return CMD_RET_USAGE;
20
21	addr = hextoul(argv[1], NULL);
22	size = dectoul(argv[2], NULL);
23
24	return pcap_init(addr, size) ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
25}
26
27static int do_pcap_start(struct cmd_tbl *cmdtp, int flag, int argc,
28			 char *const argv[])
29{
30	return pcap_start_stop(true) ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
31}
32
33static int do_pcap_stop(struct cmd_tbl *cmdtp, int flag, int argc,
34			char *const argv[])
35{
36	return pcap_start_stop(false) ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
37}
38
39static int do_pcap_status(struct cmd_tbl *cmdtp, int flag, int argc,
40			  char *const argv[])
41{
42	return pcap_print_status() ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
43}
44
45static int do_pcap_clear(struct cmd_tbl *cmdtp, int flag, int argc,
46			 char *const argv[])
47{
48	return pcap_clear() ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
49}
50
51U_BOOT_LONGHELP(pcap,
52	"- network packet capture\n\n"
53	"pcap\n"
54	"pcap init\t\t\t<addr> <max_size>\n"
55	"pcap start\t\t\tstart capture\n"
56	"pcap stop\t\t\tstop capture\n"
57	"pcap status\t\t\tprint status\n"
58	"pcap clear\t\t\tclear capture buffer\n"
59	"\n"
60	"With:\n"
61	"\t<addr>: user address to which pcap will be stored (hexedcimal)\n"
62	"\t<max_size>: Maximum size of pcap file (decimal)\n"
63	"\n");
64
65U_BOOT_CMD_WITH_SUBCMDS(pcap, "pcap", pcap_help_text,
66			U_BOOT_SUBCMD_MKENT(init, 3, 0, do_pcap_init),
67			U_BOOT_SUBCMD_MKENT(start, 1, 0, do_pcap_start),
68			U_BOOT_SUBCMD_MKENT(stop, 1, 0, do_pcap_stop),
69			U_BOOT_SUBCMD_MKENT(status, 1, 0, do_pcap_status),
70			U_BOOT_SUBCMD_MKENT(clear, 1, 0, do_pcap_clear),
71);
72