Browse Source

[cmdline] Add "sync" command

Add "sync" command (loosely based on the Unix "sync"), which will wait
for any pending operations to complete.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 12 years ago
parent
commit
addf699c86
3 changed files with 86 additions and 0 deletions
  1. 3
    0
      src/config/config.c
  2. 1
    0
      src/config/general.h
  3. 82
    0
      src/hci/commands/sync_cmd.c

+ 3
- 0
src/config/config.c View File

@@ -241,6 +241,9 @@ REQUIRE_OBJECT ( reboot_cmd );
241 241
 #ifdef CPUID_CMD
242 242
 REQUIRE_OBJECT ( cpuid_cmd );
243 243
 #endif
244
+#ifdef SYNC_CMD
245
+REQUIRE_OBJECT ( sync_cmd );
246
+#endif
244 247
 
245 248
 /*
246 249
  * Drag in miscellaneous objects

+ 1
- 0
src/config/general.h View File

@@ -117,6 +117,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
117 117
 #define SANBOOT_CMD		/* SAN boot commands */
118 118
 #define MENU_CMD		/* Menu commands */
119 119
 #define LOGIN_CMD		/* Login command */
120
+#define SYNC_CMD		/* Sync command */
120 121
 //#define TIME_CMD		/* Time commands */
121 122
 //#define DIGEST_CMD		/* Image crypto digest commands */
122 123
 //#define LOTEST_CMD		/* Loopback testing commands */

+ 82
- 0
src/hci/commands/sync_cmd.c View File

@@ -0,0 +1,82 @@
1
+/*
2
+ * Copyright (C) 2012 Michael Brown <mbrown@fensystems.co.uk>.
3
+ *
4
+ * This program is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU General Public License as
6
+ * published by the Free Software Foundation; either version 2 of the
7
+ * License, or any later version.
8
+ *
9
+ * This program is distributed in the hope that it will be useful, but
10
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
+ * General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with this program; if not, write to the Free Software
16
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
+ */
18
+
19
+FILE_LICENCE ( GPL2_OR_LATER );
20
+
21
+#include <string.h>
22
+#include <stdio.h>
23
+#include <getopt.h>
24
+#include <ipxe/command.h>
25
+#include <ipxe/parseopt.h>
26
+#include <ipxe/timer.h>
27
+#include <ipxe/pending.h>
28
+
29
+/** @file
30
+ *
31
+ * "sync" command
32
+ *
33
+ */
34
+
35
+/** "sync" options */
36
+struct sync_options {
37
+	/** Timeout */
38
+	unsigned int timeout;
39
+};
40
+
41
+/** "sync" option list */
42
+static struct option_descriptor sync_opts[] = {
43
+	OPTION_DESC ( "timeout", 't', required_argument,
44
+		      struct sync_options, timeout, parse_integer ),
45
+};
46
+
47
+/** "sync" command descriptor */
48
+static struct command_descriptor sync_cmd =
49
+	COMMAND_DESC ( struct sync_options, sync_opts, 0, 0,
50
+		       "[--timeout <timeout>]" );
51
+
52
+/**
53
+ * "sync" command
54
+ *
55
+ * @v argc		Argument count
56
+ * @v argv		Argument list
57
+ * @ret rc		Return status code
58
+ */
59
+static int sync_exec ( int argc, char **argv ) {
60
+	struct sync_options opts;
61
+	unsigned long timeout;
62
+	int rc;
63
+
64
+	/* Parse options */
65
+	if ( ( rc = parse_options ( argc, argv, &sync_cmd, &opts ) ) != 0 )
66
+		return rc;
67
+
68
+	/* Wait for pending operations to complete */
69
+	timeout = ( ( opts.timeout * TICKS_PER_SEC ) / 1000 );
70
+	if ( ( rc = pending_wait ( timeout ) ) != 0 ) {
71
+		printf ( "Operations did not complete: %s\n", strerror ( rc ) );
72
+		return rc;
73
+	}
74
+
75
+	return 0;
76
+}
77
+
78
+/** Sync commands */
79
+struct command sync_command __command = {
80
+	.name = "sync",
81
+	.exec = sync_exec,
82
+};

Loading…
Cancel
Save