diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-11-09 07:52:27 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-11-09 07:52:27 +0000 |
commit | ab77e81f6521e97ac2fe2218013d5871a893db0f (patch) | |
tree | b9a2ce5ef8aa85c01c304eeea6ae6c965dda2947 /xen/include/xen/decompress.h | |
parent | 14ec087884b13aa9de838ab11fd4e67e255d4ded (diff) | |
download | xen-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.h | 38 |
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 |