Skip to contentSkip to conversation

add generic builtin command line]

PATCH New dwalker at fifo99.com 1 participant 1 message Oct 6, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/7 add generic builtin command line]

----- Forwarded message from Daniel Walker <[email protected]> -----

Date: Tue, 6 Oct 2015 08:47:08 -0700
From: Daniel Walker <[email protected]>
To: xe-kernel at external.cisco.com, Andrew Morton <[email protected]>
Cc: Daniel Walker <[email protected]>, linux-kernel at vger.kernel.org
Subject: [PATCH-RFC 1/7] add generic builtin command line
X-Mailer: git-send-email 2.1.4

This code allows architectures to use a generic builtin command line. The state of the builtin command line options across architecture is diverse. On x86 and mips they have pretty much the same code and the code prepends the builtin command line onto the boot loader provided one. On powerpc there is only a builtin override and nothing else.

The code in this commit unifies the mips and x86 code into a generic header file under the CONFIG_GENERIC_CMDLINE option. When this option is enabled the architecture can call the cmdline_add_builtin() to add the builtin command line.

Cc xe-kernel at external.cisco.com
Cc Daniel Walker <[email protected]>
---
 include/linux/cmdline.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
 init/Kconfig            | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 137 insertions(+)
 create mode 100644 include/linux/cmdline.h
include/linux/cmdline.h new file +69 -0
new file mode 100644
index 0000000..42282a1
@@ -0,0 +1,69 @@
+#ifndef _LINUX_CMDLINE_H
+#define _LINUX_CMDLINE_H
+
+/*
+ *
+ * Copyright (C) 2015. Cisco Systems, Inc.
+ *
+ * Generic Append/Prepend cmdline support.
+ */
+
+#if defined(CONFIG_GENERIC_CMDLINE) && defined(CONFIG_CMDLINE_BOOL)
+
+#ifndef CONFIG_CMDLINE_OVERRIDE
+/*
+ * This function will append or prepend a builtin command line to the command
+ * line provided by the bootloader. Kconfig options can be used to alter
+ * the behavior of this builtin command line.
+ * @dest: The destination of the final appended/prepended string
+ * @src: The starting string or NULL if there isn't one.
+ * @tmp: temporary space used for prepending
+ * @length: the maximum length of the strings above.
+ */
+static inline void
+_cmdline_add_builtin(char *dest, char *src, char *tmp, unsigned long length)
+{
+	if (src != dest && src != NULL) {
+		strlcpy(dest, " ", length);
+		strlcat(dest, src, length);
+	}
+
+	strlcat(dest, " ", length);
+
+	if (sizeof(CONFIG_CMDLINE_APPEND) > 1)
+		strlcat(dest, CONFIG_CMDLINE_APPEND, length);
+
+	if (sizeof(CONFIG_CMDLINE_PREPEND) > 1) {
+		strlcpy(tmp, CONFIG_CMDLINE_PREPEND, length);
+		strlcat(tmp, " ", length);
+		strlcat(tmp, dest, length);
+		strlcpy(dest, tmp, length);
+	}
+}
+
+#define cmdline_add_builtin(dest, src, length) 				    \
+{ 									    \
+	if (sizeof(CONFIG_CMDLINE_PREPEND) > 1) { 			    \
+		static __initdata char cmdline_tmp_space[length]; 	    \
+		_cmdline_add_builtin(dest, src, cmdline_tmp_space, length); \
+	} else if (sizeof(CONFIG_CMDLINE_APPEND) > 1) { 		    \
+		_cmdline_add_builtin(dest, src, NULL, length); 		    \
+	} 								    \
+}
+#else
+#define cmdline_add_builtin(dest, src, length)				   \
+{								  	   \
+	strlcpy(dest, CONFIG_CMDLINE_PREPEND " " CONFIG_CMDLINE_APPEND,    \
+		length);		   				   \
+}
+#endif /* !CONFIG_CMDLINE_OVERRIDE */
+
+#else
+#define cmdline_add_builtin(dest, src, length) { \
+	if (src != NULL) 						   \
+		strlcpy(dest, src, length);	 			   \
+}
+#endif /* CONFIG_GENERIC_CMDLINE */
+
+
+#endif /* _LINUX_CMDLINE_H */
init/Kconfig +68 -0

74 lines not on this page · raw message

Signature · 4 lines
2.1.4


----- End forwarded message -----