monitor: Add option to suppress HCI vendor events

When idle, Marvell 88W8897 Bluetooth adapter sends the following
HCI vendor events to BlueZ stack on continuous basis:

$ btmon
Bluetooth monitor ver 5.43
= New Index: XX:XX:XX:XX:XX:XX (Primary,SDIO,hci0)   [hci0] 0.029199
= Open Index: XX:XX:XX:XX:XX:XX                      [hci0] 0.029211
= Index Info: XX:XX:XX:XX:XX:XX (Marvell Technology Group Ltd.)
                                                     [hci0] 0.029222
> HCI Event: Vendor (0xff) plen 5                    [hci0] 0.300944
        05 80 00 09 00
> HCI Event: Vendor (0xff) plen 5                    [hci0] 2.860113
        05 80 00 09 00
> HCI Event: Vendor (0xff) plen 5                    [hci0] 5.420643
        05 80 00 09 00
  ...

Add option to suppress these HCI vendor events from btmon log.

Change-Id: I357ef2c65c3ea18faf6a4462c7e70d2fc92219db
diff --git a/monitor/main.c b/monitor/main.c
index c04a94a..9976b79 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -71,6 +71,7 @@
 		"\t-S, --sco              Dump SCO traffic\n"
 		"\t-E, --ellisys [ip]     Send Ellisys HCI Injection\n"
 		"\t-A, --no_leadv         Suppress LE_ADV messages\n"
+		"\t-V, --no_vendor        Suppress Vendor messages\n"
 		"\t-h, --help             Show help options\n");
 }
 
@@ -88,6 +89,7 @@
 	{ "sco",     no_argument,	NULL, 'S' },
 	{ "ellisys", required_argument, NULL, 'E' },
 	{ "no_leadv", no_argument,      NULL, 'A' },
+	{ "no_vendor", no_argument,     NULL, 'V' },
 	{ "todo",    no_argument,       NULL, '#' },
 	{ "version", no_argument,       NULL, 'v' },
 	{ "help",    no_argument,       NULL, 'h' },
@@ -116,7 +118,7 @@
 	for (;;) {
 		int opt;
 
-		opt = getopt_long(argc, argv, "d:r:w:a:s:p:i:tTSAE:vh",
+		opt = getopt_long(argc, argv, "d:r:w:a:s:p:i:tTSAVE:vh",
 						main_options, NULL);
 		if (opt < 0)
 			break;
@@ -173,6 +175,9 @@
 		case 'A':
 			filter_mask |= PACKET_FILTER_SUPPRESS_LE_ADV;
 			break;
+		case 'V':
+			filter_mask |= PACKET_FILTER_SUPPRESS_VENDOR;
+			break;
 		case 'E':
 			ellisys_server = optarg;
 			ellisys_port = 24352;
diff --git a/monitor/packet.c b/monitor/packet.c
index 45c9e8c..cf4f40d 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9046,6 +9046,9 @@
 		}
 	}
 
+	if (filter_mask & PACKET_FILTER_SUPPRESS_VENDOR && hdr->evt == 0xff)
+		return;
+
 	sprintf(extra_str, "(0x%2.2x) plen %d", hdr->evt, hdr->plen);
 
 	print_packet(tv, cred, '>', index, NULL, event_color, "HCI Event",
diff --git a/monitor/packet.h b/monitor/packet.h
index a02ea50..0330857 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -33,6 +33,7 @@
 #define PACKET_FILTER_SHOW_TIME_OFFSET	(1 << 3)
 #define PACKET_FILTER_SHOW_ACL_DATA	(1 << 4)
 #define PACKET_FILTER_SHOW_SCO_DATA	(1 << 5)
+#define PACKET_FILTER_SUPPRESS_VENDOR	(1 << 30)
 #define PACKET_FILTER_SUPPRESS_LE_ADV	(1 << 31)
 
 void packet_set_filter(unsigned long filter);