New Commands to only load modules, only initialize cards,
only reset cards, inititialize a single card or reset a single card.
This commit is contained in:
parent
0ed97fbda3
commit
cbd4140a85
|
@ -2,6 +2,10 @@
|
|||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.10 2002/10/25 13:50:44 calle
|
||||
* The protocol value was not tranfered to the patchinfo. Because of
|
||||
* this for example NI1 did not work ...
|
||||
*
|
||||
* Revision 1.9 2002/05/23 12:52:36 calle
|
||||
* - Uaah. Bugfix for c2 patchvalues.
|
||||
*
|
||||
|
@ -74,6 +78,7 @@ static char *firmwarepath[] = {
|
|||
static int capifd = -1;
|
||||
|
||||
static int patchdebug = 0; /* -d || -debug */
|
||||
static int silent = 0; /* -s || -silent */
|
||||
char *configfilename = "/etc/capi.conf";
|
||||
|
||||
/* ---------------- utils -------------------------------------------- */
|
||||
|
@ -259,10 +264,12 @@ find_contrprocinfo(struct contrprocinfo *cpinfo, int contr)
|
|||
return p;
|
||||
}
|
||||
|
||||
static void show_contrprocinfo(struct contrprocinfo *cpinfo)
|
||||
static void show_contrprocinfo(struct contrprocinfo *cpinfo, char *cardname)
|
||||
{
|
||||
struct contrprocinfo *p;
|
||||
for (p = cpinfo; p; p = p->next) {
|
||||
if (cardname && strcmp(cardname, p->name) != 0)
|
||||
continue;
|
||||
printf("%d %-10s %-8s %-16s %s\n",
|
||||
p->contr, p->driver, cardstate2str(p->state),
|
||||
p->name, p->driverinfo);
|
||||
|
@ -1220,16 +1227,19 @@ static int card_exists(const char * driver, int ioaddr)
|
|||
}
|
||||
|
||||
|
||||
int main_start(void)
|
||||
int main_start(int activate, char *cardname, int number)
|
||||
{
|
||||
struct capicard *cards, *card;
|
||||
struct contrprocinfo *cpinfo, *p;
|
||||
int contr, lastcontr;
|
||||
int ret = 0;
|
||||
char cname[32];
|
||||
|
||||
if (prestartcheck() < 0)
|
||||
return -1;
|
||||
|
||||
cname[0] = 0;
|
||||
|
||||
/* could not fail, tested by check_for_capi() */
|
||||
capifd = open(capidevname, O_RDWR);
|
||||
|
||||
|
@ -1247,43 +1257,78 @@ int main_start(void)
|
|||
}
|
||||
|
||||
mark_unfound(cards);
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = 1; contr <= lastcontr; contr++) {
|
||||
struct capicard *thiscard;
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
thiscard = find_config(cards, p->driver);
|
||||
if (p->state == CARD_LOADING)
|
||||
reset_controller(contr);
|
||||
if (p->state == CARD_DETECTED) {
|
||||
if (thiscard) {
|
||||
card = load_firmware(contr, thiscard);
|
||||
} else {
|
||||
fprintf(stderr,"ERROR: missing config entry for controller %d driver %s name %s\n",
|
||||
p->contr, p->driver, p->name);
|
||||
if (activate) {
|
||||
int act;
|
||||
act = 0;
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = 1; contr <= lastcontr; contr++) {
|
||||
struct capicard *thiscard;
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
thiscard = find_config(cards, p->driver);
|
||||
if (cardname) {
|
||||
if (number == 0) {
|
||||
if (strcmp(cardname, p->name) != 0) {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
} else if (strcmp(cardname, p->driver) == 0) {
|
||||
if (++act != number) {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
strncpy(cname, p->name, sizeof(cname));
|
||||
}
|
||||
if (p->state == CARD_LOADING)
|
||||
reset_controller(contr);
|
||||
if (p->state == CARD_DETECTED) {
|
||||
if (thiscard) {
|
||||
card = load_firmware(contr, thiscard);
|
||||
} else {
|
||||
fprintf(stderr,"ERROR: missing config entry for controller %d driver %s name %s\n",
|
||||
p->contr, p->driver, p->name);
|
||||
}
|
||||
}
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
mark_unfound(cards);
|
||||
act = 0;
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = 1; contr <= lastcontr; contr++) {
|
||||
struct capicard *thiscard;
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
thiscard = find_config(cards, p->driver);
|
||||
if (cardname && cname[0]) {
|
||||
if (strcmp(cname, p->name) != 0) {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (p->state == CARD_DETECTED && thiscard) {
|
||||
fprintf(stderr,"ERROR: failed to load firmware for controller %d driver %s name %s\n",
|
||||
p->contr, p->driver, p->name);
|
||||
ret = 3;
|
||||
}
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
mark_unfound(cards);
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = 1; contr <= lastcontr; contr++) {
|
||||
struct capicard *thiscard;
|
||||
|
||||
if (cardname && cname[0] == 0) {
|
||||
fprintf(stderr,"ERROR: card \"%s\" not found\n", cardname);
|
||||
ret = 4;
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
thiscard = find_config(cards, p->driver);
|
||||
if (p->state == CARD_DETECTED && thiscard) {
|
||||
fprintf(stderr,"ERROR: failed to load firmware for controller %d driver %s name %s\n",
|
||||
p->contr, p->driver, p->name);
|
||||
ret = 3;
|
||||
}
|
||||
show_contrprocinfo(cpinfo, cardname ? cname: "");
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
show_contrprocinfo(cpinfo);
|
||||
|
||||
free_contrprocinfo(&cpinfo);
|
||||
free_config(&cards);
|
||||
close(capifd);
|
||||
|
||||
|
@ -1292,59 +1337,98 @@ int main_start(void)
|
|||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
int main_stop(void)
|
||||
int main_stop(int unload, char *cardname, int number)
|
||||
{
|
||||
struct capicard *cards, *card;
|
||||
struct contrprocinfo *cpinfo, *p;
|
||||
int contr, lastcontr;
|
||||
char *mp;
|
||||
int act;
|
||||
char cname[32];
|
||||
|
||||
if (prestopcheck() < 0)
|
||||
return -1;
|
||||
|
||||
cname[0] = 0;
|
||||
|
||||
/* could not fail, tested by check_for_capi() */
|
||||
capifd = open(capidevname, O_RDWR);
|
||||
|
||||
act = 0;
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = lastcontr; contr > 0; contr--) {
|
||||
if (cardname) {
|
||||
for (contr = 1; contr <= lastcontr; contr++) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
if (number == 0) {
|
||||
if (strcmp(cardname, p->name) != 0) {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
} else if (strcmp(cardname, p->driver) == 0) {
|
||||
if (++act != number) {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
free_contrprocinfo(&cpinfo);
|
||||
continue;
|
||||
}
|
||||
strncpy(cname, p->name, sizeof(cname));
|
||||
if (p && p->state != CARD_DETECTED)
|
||||
reset_controller(contr);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
} else {
|
||||
for (contr = lastcontr; contr > 0; contr--) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
if (p && p->state != CARD_DETECTED)
|
||||
reset_controller(contr);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
}
|
||||
if (unload) {
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = lastcontr; contr > 0; contr--) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
if (p)
|
||||
remove_controller(contr);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
}
|
||||
if (!silent) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
if (p && p->state == CARD_RUNNING)
|
||||
reset_controller(contr);
|
||||
show_contrprocinfo(cpinfo, cardname ? cname: 0);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
cpinfo = load_contrprocinfo(&lastcontr);
|
||||
for (contr = lastcontr; contr > 0; contr--) {
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
p = find_contrprocinfo(cpinfo, contr);
|
||||
if (p)
|
||||
remove_controller(contr);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
}
|
||||
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
show_contrprocinfo(cpinfo);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
close(capifd);
|
||||
|
||||
cards = load_config(configfilename);
|
||||
for (card = cards; card; card = card->next) {
|
||||
if (driver_loaded(card->driver))
|
||||
unload_driver(card->driver);
|
||||
}
|
||||
for (card = cards; card; card = card->next) {
|
||||
if (driver_loaded(card->driver))
|
||||
unload_driver(card->driver);
|
||||
}
|
||||
if (unload && !cardname) {
|
||||
cards = load_config(configfilename);
|
||||
for (card = cards; card; card = card->next) {
|
||||
if (driver_loaded(card->driver))
|
||||
unload_driver(card->driver);
|
||||
}
|
||||
for (card = cards; card; card = card->next) {
|
||||
if (driver_loaded(card->driver))
|
||||
unload_driver(card->driver);
|
||||
}
|
||||
|
||||
unload_module("capi");
|
||||
unload_module("capidrv");
|
||||
unload_module("kernelcapi");
|
||||
unload_module("capiutil");
|
||||
if ((mp = mounted("capifs")) != 0 && strcmp(mp, "/dev/capi") == 0)
|
||||
system("umount /dev/capi");
|
||||
if (filesystem_available("capifs"))
|
||||
unload_filesystem("capifs");
|
||||
unload_module("capi");
|
||||
unload_module("capidrv");
|
||||
unload_module("kernelcapi");
|
||||
unload_module("capiutil");
|
||||
if ((mp = mounted("capifs")) != 0 && strcmp(mp, "/dev/capi") == 0)
|
||||
system("umount /dev/capi");
|
||||
if (filesystem_available("capifs"))
|
||||
unload_filesystem("capifs");
|
||||
}
|
||||
if (cardname && cname[0] == 0) {
|
||||
fprintf(stderr,"ERROR: card \"%s\" not found\n", cardname);
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1363,15 +1447,49 @@ int main_show(void)
|
|||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
int main_status(void)
|
||||
{
|
||||
struct contrprocinfo *cpinfo;
|
||||
|
||||
cpinfo = load_contrprocinfo(0);
|
||||
show_contrprocinfo(cpinfo, 0);
|
||||
free_contrprocinfo(&cpinfo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: capiinit [OPTION]\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] start\n");
|
||||
fprintf(stderr, " - load all modules and inititialize all cards\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] stop\n");
|
||||
fprintf(stderr, " - reset all cards and unload modules\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] show\n");
|
||||
fprintf(stderr, " - show current config\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] status\n");
|
||||
fprintf(stderr, " - show current status\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] prepare\n");
|
||||
fprintf(stderr, " - load all modules\n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] activate\n");
|
||||
fprintf(stderr, " - inititialize all cards \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] activate cardname\n");
|
||||
fprintf(stderr, " - inititialize one cards (i.e.: c4-ec00) \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] activate driver [cardnumber]\n");
|
||||
fprintf(stderr, " - inititialize one card \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] deactivate\n");
|
||||
fprintf(stderr, " - reset all cards \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] deactivate cardname\n");
|
||||
fprintf(stderr, " - reset one card (i.e.: c4-ec00) \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] deactivate driver [cardnumber]\n");
|
||||
fprintf(stderr, " - reset one cards \n");
|
||||
fprintf(stderr, " or: capiinit [OPTION] reload\n");
|
||||
fprintf(stderr, " - reset all cards and initialize them again\n");
|
||||
fprintf(stderr, "Setup or unsetup CAPI2.0 Controllers\n");
|
||||
fprintf(stderr, " -c, --config filename (default %s)\n", configfilename);
|
||||
fprintf(stderr, " -d, --debug save patchvalues for debugging\n");
|
||||
fprintf(stderr, " -s, --silent don't show status\n");
|
||||
}
|
||||
|
||||
int main(int ac, char *av[])
|
||||
|
@ -1383,10 +1501,11 @@ int main(int ac, char *av[])
|
|||
static struct option long_options[] = {
|
||||
{"config", 1, 0, 'c'},
|
||||
{"debug", 1, 0, 'd'},
|
||||
{"silent", 1, 0, 's'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
c = getopt_long (ac, av, "c:d",
|
||||
c = getopt_long (ac, av, "c:ds",
|
||||
long_options, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
|
@ -1406,6 +1525,9 @@ int main(int ac, char *av[])
|
|||
case 'd':
|
||||
patchdebug = 1;
|
||||
break;
|
||||
case 's':
|
||||
silent = 1;
|
||||
break;
|
||||
case '?':
|
||||
usage();
|
||||
return 1;
|
||||
|
@ -1413,14 +1535,37 @@ int main(int ac, char *av[])
|
|||
}
|
||||
|
||||
if (optind == ac) {
|
||||
return main_start();
|
||||
return main_start(1, 0, 0);
|
||||
} else if (optind+1 == ac) {
|
||||
if (strcmp(av[optind], "start") == 0)
|
||||
return main_start();
|
||||
else if (strcmp(av[optind], "stop") == 0)
|
||||
return main_stop();
|
||||
else if (strcmp(av[optind], "show") == 0)
|
||||
if (strcmp(av[optind], "start") == 0) {
|
||||
return main_start(1, 0, 0);
|
||||
} else if (strcmp(av[optind], "activate") == 0) {
|
||||
return main_start(1, 0, 0);
|
||||
} else if (strcmp(av[optind], "prepare") == 0) {
|
||||
return main_start(0, 0, 0);
|
||||
} else if (strcmp(av[optind], "stop") == 0) {
|
||||
return main_stop(1, 0, 0);
|
||||
} else if (strcmp(av[optind], "deactivate") == 0) {
|
||||
return main_stop(0, 0, 0);
|
||||
} else if (strcmp(av[optind], "show") == 0) {
|
||||
return main_show();
|
||||
} else if (strcmp(av[optind], "status") == 0) {
|
||||
return main_status();
|
||||
} else if (strcmp(av[optind], "reload") == 0) {
|
||||
if (main_stop(0, 0, 0) == 0)
|
||||
return main_start(1, 0, 0);
|
||||
}
|
||||
} else if (optind+2 == ac) {
|
||||
int number = strchr(av[optind+1], '-') == 0 ? 1 : 0;
|
||||
if (strcmp(av[optind], "activate") == 0)
|
||||
return main_start(1, av[optind+1], number);
|
||||
else if (strcmp(av[optind], "deactivate") == 0)
|
||||
return main_stop(0, av[optind+1], number);
|
||||
} else if (optind+3 == ac) {
|
||||
if (strcmp(av[optind], "activate") == 0)
|
||||
return main_start(1, av[optind+1], atoi(av[optind+2]));
|
||||
else if (strcmp(av[optind], "deactivate") == 0)
|
||||
return main_stop(0, av[optind+1], atoi(av[optind+2]));
|
||||
}
|
||||
usage();
|
||||
return 1;
|
||||
|
|
Loading…
Reference in New Issue