1struct platform_device;
2typedef unsigned long __kernel_size_t;
3typedef unsigned short __u16;
4typedef unsigned int __u32;
5typedef unsigned char u8;
6typedef unsigned short u16;
7typedef __kernel_size_t size_t;
8typedef __u32 uint32_t;
9static inline __attribute__ ((always_inline))
10uint32_t __attribute__ ((pure)) bfin_dspid (void)
11{
12    return ( {
13	    uint32_t __v; __v;}
14    );
15}
16struct list_head {
17    struct list_head *next, *prev;
18};
19struct page {
20    union {
21    };
22    struct list_head lru;
23};
24struct device_driver {
25    const char *name;
26    struct module *owner;
27};
28struct fb_info {
29    struct device *dev;
30};
31struct platform_driver {
32    int (*probe) (struct platform_device *);
33    int (*remove) (struct platform_device *);
34    struct device_driver driver;
35};
36struct firmware {
37    size_t size;
38    const u8 *data;
39};
40struct metronomefb_par {
41    struct fb_info *info;
42};
43struct waveform_hdr {
44    u8 trc;
45};
46static u8 calc_cksum (int start, int end, u8 * mem)
47{
48    u8 tmp = 0;
49    int i;
50    for (i = start; i < end; i++)
51	tmp += mem[i];
52    return tmp;
53}
54extern struct waveform_hdr *wfm_hdr;
55extern int wmta;
56
57static int
58load_waveform (u8 * mem, size_t size, int m, int t, struct metronomefb_par *par)
59{
60    int tta;
61    int trn = 0;
62    int i;
63    u8 cksum;
64    int cksum_idx;
65    struct device *dev = par->info->dev;
66    for (i = 0; i <= sizeof (*wfm_hdr) + wfm_hdr->trc; i++) {
67	if (mem[i] > t) {
68	    trn = i - sizeof (*wfm_hdr) - 1;
69	}
70    }
71    tta = * (mem + wmta + m * 4) & 0x00FFFFFF;
72    cksum_idx = tta + trn * 4 + 3;
73    cksum = calc_cksum (cksum_idx - 3, cksum_idx, mem);
74    if (cksum != mem[cksum_idx]) {
75	abort();
76    }
77}
78extern struct firmware *fw_entry;
79extern struct metronomefb_par *par;
80
81int metronomefb_probe (struct platform_device *dev)
82{
83	return load_waveform ((u8 *) fw_entry->data, fw_entry->size, 3, 31, par);
84}
85