Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / pnm.h
1 #ifndef _IPXE_PNM_H
2 #define _IPXE_PNM_H
3
4 /** @file
5  *
6  * Portable anymap format (PNM)
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <stdint.h>
13 #include <ipxe/uaccess.h>
14 #include <ipxe/image.h>
15
16 /** PNM signature */
17 struct pnm_signature {
18         /** Magic byte ('P') */
19         char magic;
20         /** PNM type */
21         char type;
22         /** Whitespace */
23         char space;
24 } __attribute__ (( packed ));
25
26 /** PNM magic byte */
27 #define PNM_MAGIC 'P'
28
29 /** PNM context */
30 struct pnm_context {
31         /** PNM type */
32         struct pnm_type *type;
33         /** Current byte offset */
34         size_t offset;
35         /** Maximum length of ASCII values */
36         size_t ascii_len;
37         /** Maximum pixel value */
38         unsigned int max;
39 };
40
41 /** Default maximum length of ASCII values */
42 #define PNM_ASCII_LEN 16
43
44 /** PNM type */
45 struct pnm_type {
46         /** PNM type */
47         char type;
48         /** Number of scalar values per pixel */
49         uint8_t depth;
50         /** Number of pixels per composite value */
51         uint8_t packing;
52         /** Flags */
53         uint8_t flags;
54         /** Extract scalar value
55          *
56          * @v image             PNM image
57          * @v pnm               PNM context
58          * @ret value           Value, or negative error
59          */
60         int ( * scalar ) ( struct image *image, struct pnm_context *pnm );
61         /** Convert composite value to 24-bit RGB
62          *
63          * @v composite         Composite value
64          * @v index             Pixel index within this composite value
65          * @ret rgb             24-bit RGB value
66          */
67         uint32_t ( * rgb ) ( uint32_t composite, unsigned int index );
68 };
69
70 /** PNM flags */
71 enum pnm_flags {
72         /** Bitmap format
73          *
74          * If set, this flag indicates that:
75          *
76          * - the maximum scalar value is predefined as being equal to
77          *   (2^packing-1), and is not present within the file, and
78          *
79          * - the maximum length of ASCII values is 1.
80          */
81         PNM_BITMAP = 0x01,
82 };
83
84 extern struct image_type pnm_image_type __image_type ( PROBE_NORMAL );
85
86 #endif /* _IPXE_PNM_H */