aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/decompress.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-11-09 07:52:27 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-11-09 07:52:27 +0000
commitab77e81f6521e97ac2fe2218013d5871a893db0f (patch)
treeb9a2ce5ef8aa85c01c304eeea6ae6c965dda2947 /xen/include/xen/decompress.h
parent14ec087884b13aa9de838ab11fd4e67e255d4ded (diff)
downloadxen-ab77e81f6521e97ac2fe2218013d5871a893db0f.tar.gz
xen-ab77e81f6521e97ac2fe2218013d5871a893db0f.tar.bz2
xen-ab77e81f6521e97ac2fe2218013d5871a893db0f.zip
x86/dom0: support bzip2 and lzma compressed bzImage payloads
This matches functionality in the tools already supporting the same for DomU-s. Code taken from Linux 2.6.32-rc and adjusted as little as possible to be usable in Xen. The question is whether, particularly for non-Linux Dom0-s, plain ELF images compressed by bzip2 or lzma should also be supported. Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/include/xen/decompress.h')
-rw-r--r--xen/include/xen/decompress.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/xen/include/xen/decompress.h b/xen/include/xen/decompress.h
new file mode 100644
index 0000000000..db74c00d24
--- /dev/null
+++ b/xen/include/xen/decompress.h
@@ -0,0 +1,38 @@
+#ifndef __XEN_GENERIC_H
+#define __XEN_GENERIC_H
+
+typedef int decompress_fn(unsigned char *inbuf, unsigned int len,
+ int (*fill)(void*, unsigned int),
+ int (*flush)(void*, unsigned int),
+ unsigned char *outbuf, unsigned int *posp,
+ void (*error)(const char *x));
+
+/* inbuf - input buffer
+ * len - len of pre-read data in inbuf
+ * fill - function to fill inbuf when empty
+ * flush - function to write out outbuf
+ * outbuf - output buffer
+ * posp - if non-null, input position (number of bytes read) will be
+ * returned here
+ * error - error reporting function
+ *
+ * If len != 0, inbuf should contain all the necessary input data, and fill
+ * should be NULL
+ * If len = 0, inbuf can be NULL, in which case the decompressor will allocate
+ * the input buffer. If inbuf != NULL it must be at least XXX_IOBUF_SIZE bytes.
+ * fill will be called (repeatedly...) to read data, at most XXX_IOBUF_SIZE
+ * bytes should be read per call. Replace XXX with the appropriate decompressor
+ * name, i.e. LZMA_IOBUF_SIZE.
+ *
+ * If flush = NULL, outbuf must be large enough to buffer all the expected
+ * output. If flush != NULL, the output buffer will be allocated by the
+ * decompressor (outbuf = NULL), and the flush function will be called to
+ * flush the output buffer at the appropriate time (decompressor and stream
+ * dependent).
+ */
+
+decompress_fn bunzip2, unlzma;
+
+int decompress(void *inbuf, unsigned int len, void *outbuf);
+
+#endif