aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/achronix
Commit message (Expand)AuthorAgeFilesLines
* Reduce amount of trailing whitespace in code baseLarry Doolittle2019-02-281-3/+3
* Merge pull request #777 from mmicko/achronix_cell_sim_fixClifford Wolf2019-01-041-1/+1
|\
| * Fix cells_sim.v for Achronix FPGAMiodrag Milanovic2019-01-041-1/+1
* | Unify usage of noflatten among architecturesMiodrag Milanovic2019-01-041-2/+2
|/
* Fix typographical and grammatical errors and inconsistencies.whitequark2019-01-022-9/+9
* Consistent use of 'override' for virtual methods in derived classes.Henner Zeller2018-07-201-4/+4
* Fixed broken Quartus backend on dffeas init value (Error (12170): Illegal val...c60k282018-03-314-118/+55
* Squelch trailing whitespace, including meta-whitespaceLarry Doolittle2018-03-112-5/+5
* Organizing Speedster file namesdh732017-11-085-4/+4
* Adding Cyclone IV (E, GX), Arria 10, Cyclone V and LPM functions (ALTPLL and ...dh732017-10-015-0/+474
: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#include <err.h>
#include <limits.h>
#include "xenctrl.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>

xc_interface *h;
int id = 0;

void daemonize(void)
{
    switch (fork()) {
    case -1:
	err(1, "fork");
    case 0:
	break;
    default:
	exit(0);
    }
    umask(0);
    if (setsid() < 0)
	err(1, "setsid");
    if (chdir("/") < 0)
	err(1, "chdir /");
    if (freopen("/dev/null", "r", stdin) == NULL)
        err(1, "reopen stdin");
    if(freopen("/dev/null", "w", stdout) == NULL)
        err(1, "reopen stdout");
    if(freopen("/dev/null", "w", stderr) == NULL)
        err(1, "reopen stderr");
}

void catch_exit(int sig)
{
    if (id)
        xc_watchdog(h, id, 300);
    exit(0);
}

void catch_usr1(int sig)
{
    if (id)
        xc_watchdog(h, id, 0);
    exit(0);
}

int main(int argc, char **argv)
{
    int t, s;
    int ret;

    if (argc < 2)
	errx(1, "usage: %s <timeout> <sleep>", argv[0]);

    daemonize();

    h = xc_interface_open(NULL, NULL, 0);
    if (h == NULL)
	err(1, "xc_interface_open");

    t = strtoul(argv[1], NULL, 0);
    if (t == ULONG_MAX)
	err(1, "strtoul");

    s = t / 2;
    if (argc == 3) {
	s = strtoul(argv[2], NULL, 0);
	if (s == ULONG_MAX)
	    err(1, "strtoul");
    }

    if (signal(SIGHUP, &catch_exit) == SIG_ERR)
	err(1, "signal");
    if (signal(SIGINT, &catch_exit) == SIG_ERR)
	err(1, "signal");
    if (signal(SIGQUIT, &catch_exit) == SIG_ERR)
	err(1, "signal");
    if (signal(SIGTERM, &catch_exit) == SIG_ERR)
	err(1, "signal");
    if (signal(SIGUSR1, &catch_usr1) == SIG_ERR)
	err(1, "signal");

    id = xc_watchdog(h, 0, t);
    if (id <= 0)
        err(1, "xc_watchdog setup");

    for (;;) {
        sleep(s);
        ret = xc_watchdog(h, id, t);
        if (ret != 0)
            err(1, "xc_watchdog");
    }
}