xref: /openbsd-src/sys/dev/microcode/myx/build.c (revision a28daedfc357b214be5c701aa8ba8adb29a7f1c2)
1 /*	$OpenBSD: build.c,v 1.1 2007/05/31 18:27:59 reyk Exp $	*/
2 
3 /*
4  * Copyright (c) 2007 Reyk Floeter <reyk@openbsd.org>
5  * Copyright (c) 2004 Theo de Raadt <deraadt@openbsd.org>
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #include <sys/types.h>
21 
22 #include <dev/pci/if_myxreg.h>
23 
24 #include <fcntl.h>
25 #include <stdlib.h>
26 #include <err.h>
27 #include <unistd.h>
28 #include <string.h>
29 #include <stdio.h>
30 
31 #include "myxfw.h"
32 
33 void
34 myx_build_firmware(u_int32_t *fw, size_t len, const char *file)
35 {
36 	int		fd, rlen;
37 	size_t		i, total = 0;
38 	u_int32_t	data;
39 
40 	printf("creating %s", file);
41 	fd = open(file, O_WRONLY|O_CREAT|O_TRUNC, 0644);
42 	if (fd == -1)
43 		err(1, file);
44 
45 	for (i = 0; i < len; i++) {
46 		data = letoh32(fw[i]);
47 		rlen = write(fd, &data, sizeof(u_int32_t));
48 		if (rlen == -1) {
49 			printf("\n");
50 			err(1, "%s", file);
51 		}
52 		if (rlen != sizeof(u_int32_t)) {
53 			printf("\n");
54 			errx(1, "%s: short write", file);
55 		}
56 		total += rlen;
57 	}
58 
59 	printf(" total %d\n", total);
60 	close(fd);
61 }
62 
63 int
64 main(int argc, char *argv[])
65 {
66 	myx_build_firmware(myxfw_eth_z8e,
67 	    MYXFW_ETH_Z8E_SIZE, MYXFW_ALIGNED);
68 	myx_build_firmware(myxfw_ethp_z8e,
69 	    MYXFW_ETHP_Z8E_SIZE, MYXFW_UNALIGNED);
70 	return (0);
71 }
72