[BACK]Return to build.c CVS log [TXT][DIR] Up to [local] / sys / dev / microcode / bnx

Annotation of sys/dev/microcode/bnx/build.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: build.c,v 1.4 2007/01/10 18:09:25 deraadt Exp $       */
                      2:
                      3: /*
                      4:  * Copyright (c) 2004 Theo de Raadt <deraadt@openbsd.org>
                      5:  *
                      6:  * Permission to use, copy, modify, and distribute this software for any
                      7:  * purpose with or without fee is hereby granted, provided that the above
                      8:  * copyright notice and this permission notice appear in all copies.
                      9:  *
                     10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     17:  */
                     18: #include <sys/types.h>
                     19: #include <dev/pci/if_bnxreg.h>
                     20: #include <fcntl.h>
                     21: #include <stdlib.h>
                     22: #include <err.h>
                     23: #include <unistd.h>
                     24: #include <string.h>
                     25: #include <stdio.h>
                     26:
                     27: #include "bnxfw.h"
                     28:
                     29: int    bnx_rv2p_proc1len;
                     30: int    bnx_rv2p_proc2len;
                     31:
                     32: #define FILENAME "bnx"
                     33:
                     34: struct chunks {
                     35:        void *start;
                     36:        int *len;
                     37: } chunks[] = {
                     38:        { bnx_COM_b06FwText, &bnx_COM_b06FwTextLen },
                     39:        { bnx_COM_b06FwData, &bnx_COM_b06FwDataLen },
                     40:        { bnx_COM_b06FwRodata, &bnx_COM_b06FwRodataLen },
                     41:        { bnx_COM_b06FwBss, &bnx_COM_b06FwBssLen },
                     42:        { bnx_COM_b06FwSbss, &bnx_COM_b06FwSbssLen },
                     43:
                     44:        { bnx_RXP_b06FwText, &bnx_RXP_b06FwTextLen },
                     45:        { bnx_RXP_b06FwData, &bnx_RXP_b06FwDataLen },
                     46:        { bnx_RXP_b06FwRodata, &bnx_RXP_b06FwRodataLen },
                     47:        { bnx_RXP_b06FwBss, &bnx_RXP_b06FwBssLen },
                     48:        { bnx_RXP_b06FwSbss, &bnx_RXP_b06FwSbssLen },
                     49:
                     50:        { bnx_TPAT_b06FwText, &bnx_TPAT_b06FwTextLen },
                     51:        { bnx_TPAT_b06FwData, &bnx_TPAT_b06FwDataLen },
                     52:        { bnx_TPAT_b06FwRodata, &bnx_TPAT_b06FwRodataLen },
                     53:        { bnx_TPAT_b06FwBss, &bnx_TPAT_b06FwBssLen },
                     54:        { bnx_TPAT_b06FwSbss, &bnx_TPAT_b06FwSbssLen },
                     55:
                     56:        { bnx_TXP_b06FwText, &bnx_TXP_b06FwTextLen },
                     57:        { bnx_TXP_b06FwData, &bnx_TXP_b06FwDataLen },
                     58:        { bnx_TXP_b06FwRodata, &bnx_TXP_b06FwRodataLen },
                     59:        { bnx_TXP_b06FwBss, &bnx_TXP_b06FwBssLen },
                     60:        { bnx_TXP_b06FwSbss, &bnx_TXP_b06FwSbssLen },
                     61:
                     62:        { bnx_rv2p_proc1, &bnx_rv2p_proc1len },
                     63:        { bnx_rv2p_proc2, &bnx_rv2p_proc2len }
                     64: };
                     65:
                     66: void
                     67: hswapn(u_int32_t *p, int wcount)
                     68: {
                     69:        for (; wcount; wcount -=4) {
                     70:                *p = htonl(*p);
                     71:                p++;
                     72:        }
                     73: }
                     74:
                     75: int
                     76: main(int argc, char *argv[])
                     77: {
                     78:        struct  bnx_firmware_header bfproto, *bf;
                     79:        int fd, i, total;
                     80:        ssize_t rlen;
                     81:
                     82:        bnx_rv2p_proc1len = sizeof bnx_rv2p_proc1;
                     83:        bnx_rv2p_proc2len = sizeof bnx_rv2p_proc2;
                     84:
                     85:        bf = (struct bnx_firmware_header *)malloc(sizeof *bf);
                     86:        bzero(bf, sizeof *bf);
                     87:
                     88:        /* initialize the file header */
                     89:        bf->bnx_COM_b06FwReleaseMajor = htonl(bnx_COM_b06FwReleaseMajor);
                     90:        bf->bnx_COM_b06FwReleaseMinor = htonl(bnx_COM_b06FwReleaseMinor);
                     91:        bf->bnx_COM_b06FwReleaseFix = htonl(bnx_COM_b06FwReleaseFix);
                     92:        bf->bnx_COM_b06FwStartAddr = htonl(bnx_COM_b06FwStartAddr);
                     93:        bf->bnx_COM_b06FwTextAddr = htonl(bnx_COM_b06FwTextAddr);
                     94:        bf->bnx_COM_b06FwTextLen = htonl(bnx_COM_b06FwTextLen);
                     95:        bf->bnx_COM_b06FwDataAddr = htonl(bnx_COM_b06FwDataAddr);
                     96:        bf->bnx_COM_b06FwDataLen = htonl(bnx_COM_b06FwDataLen);
                     97:        bf->bnx_COM_b06FwRodataAddr = htonl(bnx_COM_b06FwRodataAddr);
                     98:        bf->bnx_COM_b06FwRodataLen = htonl(bnx_COM_b06FwRodataLen);
                     99:        bf->bnx_COM_b06FwBssAddr = htonl(bnx_COM_b06FwBssAddr);
                    100:        bf->bnx_COM_b06FwBssLen = htonl(bnx_COM_b06FwBssLen);
                    101:        bf->bnx_COM_b06FwSbssAddr = htonl(bnx_COM_b06FwSbssAddr);
                    102:        bf->bnx_COM_b06FwSbssLen = htonl(bnx_COM_b06FwSbssLen);
                    103:
                    104:        bf->bnx_RXP_b06FwReleaseMajor = htonl(bnx_RXP_b06FwReleaseMajor);
                    105:        bf->bnx_RXP_b06FwReleaseMinor = htonl(bnx_RXP_b06FwReleaseMinor);
                    106:        bf->bnx_RXP_b06FwReleaseFix = htonl(bnx_RXP_b06FwReleaseFix);
                    107:        bf->bnx_RXP_b06FwStartAddr = htonl(bnx_RXP_b06FwStartAddr);
                    108:        bf->bnx_RXP_b06FwTextAddr = htonl(bnx_RXP_b06FwTextAddr);
                    109:        bf->bnx_RXP_b06FwTextLen = htonl(bnx_RXP_b06FwTextLen);
                    110:        bf->bnx_RXP_b06FwDataAddr = htonl(bnx_RXP_b06FwDataAddr);
                    111:        bf->bnx_RXP_b06FwDataLen = htonl(bnx_RXP_b06FwDataLen);
                    112:        bf->bnx_RXP_b06FwRodataAddr = htonl(bnx_RXP_b06FwRodataAddr);
                    113:        bf->bnx_RXP_b06FwRodataLen = htonl(bnx_RXP_b06FwRodataLen);
                    114:        bf->bnx_RXP_b06FwBssAddr = htonl(bnx_RXP_b06FwBssAddr);
                    115:        bf->bnx_RXP_b06FwBssLen = htonl(bnx_RXP_b06FwBssLen);
                    116:        bf->bnx_RXP_b06FwSbssAddr = htonl(bnx_RXP_b06FwSbssAddr);
                    117:        bf->bnx_RXP_b06FwSbssLen = htonl(bnx_RXP_b06FwSbssLen);
                    118:
                    119:        bf->bnx_TPAT_b06FwReleaseMajor = htonl(bnx_TPAT_b06FwReleaseMajor);
                    120:        bf->bnx_TPAT_b06FwReleaseMinor = htonl(bnx_TPAT_b06FwReleaseMinor);
                    121:        bf->bnx_TPAT_b06FwReleaseFix = htonl(bnx_TPAT_b06FwReleaseFix);
                    122:        bf->bnx_TPAT_b06FwStartAddr = htonl(bnx_TPAT_b06FwStartAddr);
                    123:        bf->bnx_TPAT_b06FwTextAddr = htonl(bnx_TPAT_b06FwTextAddr);
                    124:        bf->bnx_TPAT_b06FwTextLen = htonl(bnx_TPAT_b06FwTextLen);
                    125:        bf->bnx_TPAT_b06FwDataAddr = htonl(bnx_TPAT_b06FwDataAddr);
                    126:        bf->bnx_TPAT_b06FwDataLen = htonl(bnx_TPAT_b06FwDataLen);
                    127:        bf->bnx_TPAT_b06FwRodataAddr = htonl(bnx_TPAT_b06FwRodataAddr);
                    128:        bf->bnx_TPAT_b06FwRodataLen = htonl(bnx_TPAT_b06FwRodataLen);
                    129:        bf->bnx_TPAT_b06FwBssAddr = htonl(bnx_TPAT_b06FwBssAddr);
                    130:        bf->bnx_TPAT_b06FwBssLen = htonl(bnx_TPAT_b06FwBssLen);
                    131:        bf->bnx_TPAT_b06FwSbssAddr = htonl(bnx_TPAT_b06FwSbssAddr);
                    132:        bf->bnx_TPAT_b06FwSbssLen = htonl(bnx_TPAT_b06FwSbssLen);
                    133:
                    134:        bf->bnx_TXP_b06FwReleaseMajor = htonl(bnx_TXP_b06FwReleaseMajor);
                    135:        bf->bnx_TXP_b06FwReleaseMinor = htonl(bnx_TXP_b06FwReleaseMinor);
                    136:        bf->bnx_TXP_b06FwReleaseFix = htonl(bnx_TXP_b06FwReleaseFix);
                    137:        bf->bnx_TXP_b06FwStartAddr = htonl(bnx_TXP_b06FwStartAddr);
                    138:        bf->bnx_TXP_b06FwTextAddr = htonl(bnx_TXP_b06FwTextAddr);
                    139:        bf->bnx_TXP_b06FwTextLen = htonl(bnx_TXP_b06FwTextLen);
                    140:        bf->bnx_TXP_b06FwDataAddr = htonl(bnx_TXP_b06FwDataAddr);
                    141:        bf->bnx_TXP_b06FwDataLen = htonl(bnx_TXP_b06FwDataLen);
                    142:        bf->bnx_TXP_b06FwRodataAddr = htonl(bnx_TXP_b06FwRodataAddr);
                    143:        bf->bnx_TXP_b06FwRodataLen = htonl(bnx_TXP_b06FwRodataLen);
                    144:        bf->bnx_TXP_b06FwBssAddr = htonl(bnx_TXP_b06FwBssAddr);
                    145:        bf->bnx_TXP_b06FwBssLen = htonl(bnx_TXP_b06FwBssLen);
                    146:        bf->bnx_TXP_b06FwSbssAddr = htonl(bnx_TXP_b06FwSbssAddr);
                    147:        bf->bnx_TXP_b06FwSbssLen = htonl(bnx_TXP_b06FwSbssLen);
                    148:
                    149:        bf->bnx_rv2p_proc1len = htonl(bnx_rv2p_proc1len);
                    150:        bf->bnx_rv2p_proc2len = htonl(bnx_rv2p_proc2len);
                    151:
                    152:        printf("creating %s", FILENAME);
                    153:        fd = open(FILENAME, O_WRONLY|O_CREAT|O_TRUNC, 0644);
                    154:        if (fd == -1)
                    155:                err(1, FILENAME);
                    156:
                    157:        rlen = write(fd, bf, sizeof *bf);
                    158:        if (rlen == -1)
                    159:                err(1, "%s", FILENAME);
                    160:        if (rlen != sizeof *bf)
                    161:                errx(1, "%s: short write", FILENAME);
                    162:        total = rlen;
                    163:        printf(" [%d", total);
                    164:        fflush(stdout);
                    165:
                    166:        for (i = 0; i < sizeof(chunks) / sizeof(chunks[0]); i++) {
                    167:                hswapn(chunks[i].start, *chunks[i].len);
                    168:                rlen = write(fd, chunks[i].start, *chunks[i].len);
                    169:                if (rlen == -1) {
                    170:                        printf("\n");
                    171:                        err(1, "%s", FILENAME);
                    172:                }
                    173:                if (rlen != *chunks[i].len) {
                    174:                        printf("\n");
                    175:                        errx(1, "%s: short write", FILENAME);
                    176:                }
                    177:                printf("+%d", rlen);
                    178:                fflush(stdout);
                    179:                total += rlen;
                    180:        }
                    181:
                    182:        printf("] total %d\n", total);
                    183:
                    184:        free(bf);
                    185:        close(fd);
                    186:        return 0;
                    187: }

CVSweb