root/dev/microcode/yds/build.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. hswapn
  2. main

    1 /*      $OpenBSD: build.c,v 1.4 2007/01/06 02:48:42 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/ydsvar.h>
   20 #include <fcntl.h>
   21 #include <stdlib.h>
   22 #include <unistd.h>
   23 #include <err.h>
   24 #include <string.h>
   25 #include <stdio.h>
   26 #include "yds_hwmcode.h"
   27 
   28 #define FILENAME "yds"
   29 
   30 void
   31 hswapn(u_int32_t *p, int wcount)
   32 {
   33         for (; wcount; wcount -=4) {
   34                 *p = htonl(*p);
   35                 p++;
   36         }
   37 }
   38 
   39 int
   40 main(int argc, char *argv[])
   41 {
   42         struct  yds_firmware yfproto, *yf;
   43         int len, fd;
   44         ssize_t rlen;
   45 
   46         len = sizeof(*yf) - sizeof(yfproto.data) +
   47             sizeof(yds_dsp_mcode) + sizeof(yds_ds1_ctrl_mcode) +
   48             sizeof(yds_ds1e_ctrl_mcode);
   49 
   50         yf = (struct yds_firmware *)malloc(len);
   51         bzero(yf, len);
   52 
   53         yf->dsplen = htonl(sizeof(yds_dsp_mcode));
   54         yf->ds1len = htonl(sizeof(yds_ds1_ctrl_mcode));
   55         yf->ds1elen = htonl(sizeof(yds_ds1e_ctrl_mcode));
   56 
   57         bcopy(yds_dsp_mcode, &yf->data[0], sizeof(yds_dsp_mcode));
   58         hswapn((u_int32_t *)&yf->data[0], sizeof(yds_dsp_mcode));
   59 
   60         bcopy(yds_ds1_ctrl_mcode, &yf->data[sizeof(yds_dsp_mcode)],
   61             sizeof(yds_ds1_ctrl_mcode));
   62         hswapn((u_int32_t *)&yf->data[sizeof(yds_dsp_mcode)],
   63             sizeof(yds_ds1_ctrl_mcode));
   64 
   65         bcopy(yds_ds1e_ctrl_mcode,
   66             &yf->data[sizeof(yds_dsp_mcode) + sizeof(yds_ds1_ctrl_mcode)],
   67             sizeof(yds_ds1e_ctrl_mcode));
   68         hswapn((u_int32_t *)&yf->data[sizeof(yds_dsp_mcode) +
   69             sizeof(yds_ds1_ctrl_mcode)],
   70             sizeof(yds_ds1e_ctrl_mcode));
   71 
   72         printf("creating %s length %d [%d+%d+%d]\n",
   73             FILENAME, len, sizeof(yds_dsp_mcode),
   74             sizeof(yds_ds1_ctrl_mcode), sizeof(yds_ds1e_ctrl_mcode));
   75         fd = open(FILENAME, O_WRONLY|O_CREAT|O_TRUNC, 0644);
   76         if (fd == -1)
   77                 err(1, FILENAME);
   78 
   79         rlen = write(fd, yf, len);
   80         if (rlen == -1)
   81                 err(1, "%s", FILENAME);
   82         if (rlen != len)
   83                 errx(1, "%s: short write", FILENAME);
   84         free(yf);
   85         close(fd);
   86         return 0;
   87 }

/* [<][>][^][v][top][bottom][index][help] */