2
* $Id: capiinit.c,v 1.8 2001/04/18 10:21:42 calle Exp $
2
* $Id: capiinit.c,v 1.16 2004/01/19 09:15:57 calle Exp $
4
4
* $Log: capiinit.c,v $
5
* Revision 1.16 2004/01/19 09:15:57 calle
6
* Always use capifs, don't trust devfs.
8
* Revision 1.15 2004/01/16 15:27:12 calle
9
* remove several warnings.
11
* Revision 1.14 2004/01/16 12:33:16 calle
12
* Modifications to let ist run with patched 2.6 kernel.
13
* Pure 2.6.0/2.6.1 is not working.
15
* Revision 1.13 2003/03/31 09:50:52 calle
16
* Bugfix: fixed problems with activate and deactivate subcommands, when
17
* AVM B1 PCI V4 is used.
19
* Revision 1.12 2003/03/11 13:39:07 paul
20
* Also search for firmware in /usr/share/isdn, which is more in line with LSB
22
* Revision 1.11 2003/01/14 13:47:15 calle
23
* New Commands to only load modules, only initialize cards,
24
* only reset cards, inititialize a single card or reset a single card.
26
* Revision 1.10 2002/10/25 13:50:44 calle
27
* The protocol value was not tranfered to the patchinfo. Because of
28
* this for example NI1 did not work ...
30
* Revision 1.9 2002/05/23 12:52:36 calle
31
* - Uaah. Bugfix for c2 patchvalues.
5
33
* Revision 1.8 2001/04/18 10:21:42 calle
6
34
* support for "AVM ISDN Controller C2" added.
1237
1324
mark_unfound(cards);
1238
cpinfo = load_contrprocinfo(&lastcontr);
1239
for (contr = 1; contr <= lastcontr; contr++) {
1240
struct capicard *thiscard;
1241
cpinfo = load_contrprocinfo(0);
1242
p = find_contrprocinfo(cpinfo, contr);
1243
thiscard = find_config(cards, p->driver);
1244
if (p->state == CARD_LOADING)
1245
reset_controller(contr);
1246
if (p->state == CARD_DETECTED) {
1248
card = load_firmware(contr, thiscard);
1250
fprintf(stderr,"ERROR: missing config entry for controller %d driver %s name %s\n",
1251
p->contr, p->driver, p->name);
1254
free_contrprocinfo(&cpinfo);
1256
mark_unfound(cards);
1257
cpinfo = load_contrprocinfo(&lastcontr);
1258
for (contr = 1; contr <= lastcontr; contr++) {
1259
struct capicard *thiscard;
1260
cpinfo = load_contrprocinfo(0);
1261
p = find_contrprocinfo(cpinfo, contr);
1262
thiscard = find_config(cards, p->driver);
1263
if (p->state == CARD_DETECTED && thiscard) {
1264
fprintf(stderr,"ERROR: failed to load firmware for controller %d driver %s name %s\n",
1265
p->contr, p->driver, p->name);
1268
free_contrprocinfo(&cpinfo);
1271
cpinfo = load_contrprocinfo(0);
1272
show_contrprocinfo(cpinfo);
1274
free_contrprocinfo(&cpinfo);
1328
cpinfo = load_contrprocinfo(&lastcontr);
1329
for (contr = 1; contr <= lastcontr; contr++) {
1330
struct capicard *thiscard;
1331
cpinfo = load_contrprocinfo(0);
1332
p = find_contrprocinfo(cpinfo, contr);
1333
thiscard = find_config(cards, p->driver);
1336
if (strcmp(cardname, p->name) != 0) {
1337
free_contrprocinfo(&cpinfo);
1340
} else if (is_card_of_driver(cardname, p)) {
1341
if (++act != number) {
1342
free_contrprocinfo(&cpinfo);
1346
free_contrprocinfo(&cpinfo);
1349
strncpy(cname, p->name, sizeof(cname));
1351
if (p->state == CARD_LOADING)
1352
reset_controller(contr);
1353
if (p->state == CARD_DETECTED) {
1355
card = load_firmware(contr, thiscard);
1357
fprintf(stderr,"ERROR: missing config entry for controller %d driver %s name %s\n",
1358
p->contr, p->driver, p->name);
1361
free_contrprocinfo(&cpinfo);
1363
mark_unfound(cards);
1365
cpinfo = load_contrprocinfo(&lastcontr);
1366
for (contr = 1; contr <= lastcontr; contr++) {
1367
struct capicard *thiscard;
1368
cpinfo = load_contrprocinfo(0);
1369
p = find_contrprocinfo(cpinfo, contr);
1370
thiscard = find_config(cards, p->driver);
1371
if (cardname && cname[0]) {
1372
if (strcmp(cname, p->name) != 0) {
1373
free_contrprocinfo(&cpinfo);
1377
if (p->state == CARD_DETECTED && thiscard) {
1378
fprintf(stderr,"ERROR: failed to load firmware for controller %d driver %s name %s\n",
1379
p->contr, p->driver, p->name);
1382
free_contrprocinfo(&cpinfo);
1386
if (cardname && cname[0] == 0) {
1387
fprintf(stderr,"ERROR: card \"%s\" not found\n", cardname);
1392
cpinfo = load_contrprocinfo(0);
1393
show_contrprocinfo(cpinfo, cardname ? cname: "");
1394
free_contrprocinfo(&cpinfo);
1275
1397
free_config(&cards);
1281
1403
/* ------------------------------------------------------------------- */
1405
int main_stop(int unload, char *cardname, int number)
1285
1407
struct capicard *cards, *card;
1286
1408
struct contrprocinfo *cpinfo, *p;
1287
1409
int contr, lastcontr;
1290
1414
if (prestopcheck() < 0)
1293
1419
/* could not fail, tested by check_for_capi() */
1294
1420
capifd = open(capidevname, O_RDWR);
1296
cpinfo = load_contrprocinfo(&lastcontr);
1297
for (contr = lastcontr; contr > 0; contr--) {
1298
cpinfo = load_contrprocinfo(0);
1299
p = find_contrprocinfo(cpinfo, contr);
1300
if (p && p->state == CARD_RUNNING)
1301
reset_controller(contr);
1302
free_contrprocinfo(&cpinfo);
1304
cpinfo = load_contrprocinfo(&lastcontr);
1305
for (contr = lastcontr; contr > 0; contr--) {
1306
cpinfo = load_contrprocinfo(0);
1307
p = find_contrprocinfo(cpinfo, contr);
1309
remove_controller(contr);
1310
free_contrprocinfo(&cpinfo);
1313
cpinfo = load_contrprocinfo(0);
1314
show_contrprocinfo(cpinfo);
1315
free_contrprocinfo(&cpinfo);
1423
cpinfo = load_contrprocinfo(&lastcontr);
1425
for (contr = 1; contr <= lastcontr; contr++) {
1426
cpinfo = load_contrprocinfo(0);
1427
p = find_contrprocinfo(cpinfo, contr);
1429
if (strcmp(cardname, p->name) != 0) {
1430
free_contrprocinfo(&cpinfo);
1433
} else if (is_card_of_driver(cardname, p)) {
1434
if (++act != number) {
1435
free_contrprocinfo(&cpinfo);
1439
free_contrprocinfo(&cpinfo);
1442
strncpy(cname, p->name, sizeof(cname));
1443
if (p && p->state != CARD_DETECTED)
1444
reset_controller(contr);
1445
free_contrprocinfo(&cpinfo);
1448
for (contr = lastcontr; contr > 0; contr--) {
1449
cpinfo = load_contrprocinfo(0);
1450
p = find_contrprocinfo(cpinfo, contr);
1451
if (p && p->state != CARD_DETECTED)
1452
reset_controller(contr);
1453
free_contrprocinfo(&cpinfo);
1457
cpinfo = load_contrprocinfo(&lastcontr);
1458
for (contr = lastcontr; contr > 0; contr--) {
1459
cpinfo = load_contrprocinfo(0);
1460
p = find_contrprocinfo(cpinfo, contr);
1462
remove_controller(contr);
1463
free_contrprocinfo(&cpinfo);
1467
if (unload && !cardname) {
1468
cards = load_config(configfilename);
1469
for (card = cards; card; card = card->next) {
1470
if (driver_loaded(card->driver))
1471
unload_driver(card->driver);
1473
for (card = cards; card; card = card->next) {
1474
if (driver_loaded(card->driver))
1475
unload_driver(card->driver);
1480
cpinfo = load_contrprocinfo(0);
1481
show_contrprocinfo(cpinfo, cardname ? cname: 0);
1482
free_contrprocinfo(&cpinfo);
1318
cards = load_config(configfilename);
1319
for (card = cards; card; card = card->next) {
1320
if (driver_loaded(card->driver))
1321
unload_driver(card->driver);
1323
for (card = cards; card; card = card->next) {
1324
if (driver_loaded(card->driver))
1325
unload_driver(card->driver);
1328
unload_module("capi");
1329
unload_module("capidrv");
1330
unload_module("kernelcapi");
1331
unload_module("capiutil");
1332
if ((mp = mounted("capifs")) != 0 && strcmp(mp, "/dev/capi") == 0)
1333
system("umount /dev/capi");
1334
if (filesystem_available("capifs"))
1335
unload_filesystem("capifs");
1486
if (unload && !cardname) {
1487
unload_module("capi");
1488
unload_module("capidrv");
1489
unload_module("kernelcapi");
1490
unload_module("capiutil");
1491
if ((mp = mounted("capifs")) != 0 && strcmp(mp, "/dev/capi") == 0)
1492
system("umount /dev/capi");
1493
if (filesystem_available("capifs"))
1494
unload_filesystem("capifs");
1496
if (cardname && cname[0] == 0) {
1497
fprintf(stderr,"ERROR: card \"%s\" not found\n", cardname);
1352
1516
/* ------------------------------------------------------------------- */
1518
int main_status(void)
1520
struct contrprocinfo *cpinfo;
1522
cpinfo = load_contrprocinfo(0);
1523
show_contrprocinfo(cpinfo, 0);
1524
free_contrprocinfo(&cpinfo);
1528
/* ------------------------------------------------------------------- */
1354
1530
static void usage(void)
1356
1532
fprintf(stderr, "Usage: capiinit [OPTION]\n");
1357
1533
fprintf(stderr, " or: capiinit [OPTION] start\n");
1534
fprintf(stderr, " - load all modules and inititialize all cards\n");
1358
1535
fprintf(stderr, " or: capiinit [OPTION] stop\n");
1536
fprintf(stderr, " - reset all cards and unload modules\n");
1359
1537
fprintf(stderr, " or: capiinit [OPTION] show\n");
1538
fprintf(stderr, " - show current config\n");
1539
fprintf(stderr, " or: capiinit [OPTION] status\n");
1540
fprintf(stderr, " - show current status\n");
1541
fprintf(stderr, " or: capiinit [OPTION] prepare\n");
1542
fprintf(stderr, " - load all modules\n");
1543
fprintf(stderr, " or: capiinit [OPTION] activate\n");
1544
fprintf(stderr, " - inititialize all cards \n");
1545
fprintf(stderr, " or: capiinit [OPTION] activate cardname\n");
1546
fprintf(stderr, " - inititialize one cards (i.e.: c4-ec00) \n");
1547
fprintf(stderr, " or: capiinit [OPTION] activate driver [cardnumber]\n");
1548
fprintf(stderr, " - inititialize one card \n");
1549
fprintf(stderr, " or: capiinit [OPTION] deactivate\n");
1550
fprintf(stderr, " - reset all cards \n");
1551
fprintf(stderr, " or: capiinit [OPTION] deactivate cardname\n");
1552
fprintf(stderr, " - reset one card (i.e.: c4-ec00) \n");
1553
fprintf(stderr, " or: capiinit [OPTION] deactivate driver [cardnumber]\n");
1554
fprintf(stderr, " - reset one cards \n");
1555
fprintf(stderr, " or: capiinit [OPTION] reload\n");
1556
fprintf(stderr, " - reset all cards and initialize them again\n");
1360
1557
fprintf(stderr, "Setup or unsetup CAPI2.0 Controllers\n");
1361
1558
fprintf(stderr, " -c, --config filename (default %s)\n", configfilename);
1362
1559
fprintf(stderr, " -d, --debug save patchvalues for debugging\n");
1560
fprintf(stderr, " -s, --silent don't show status\n");
1365
1563
int main(int ac, char *av[])
1403
1605
if (optind == ac) {
1404
return main_start();
1606
return main_start(1, 0, 0);
1405
1607
} else if (optind+1 == ac) {
1406
if (strcmp(av[optind], "start") == 0)
1407
return main_start();
1408
else if (strcmp(av[optind], "stop") == 0)
1410
else if (strcmp(av[optind], "show") == 0)
1608
if (strcmp(av[optind], "start") == 0) {
1609
return main_start(1, 0, 0);
1610
} else if (strcmp(av[optind], "activate") == 0) {
1611
return main_start(1, 0, 0);
1612
} else if (strcmp(av[optind], "prepare") == 0) {
1613
return main_start(0, 0, 0);
1614
} else if (strcmp(av[optind], "stop") == 0) {
1615
return main_stop(1, 0, 0);
1616
} else if (strcmp(av[optind], "deactivate") == 0) {
1617
return main_stop(0, 0, 0);
1618
} else if (strcmp(av[optind], "show") == 0) {
1411
1619
return main_show();
1620
} else if (strcmp(av[optind], "status") == 0) {
1621
return main_status();
1622
} else if (strcmp(av[optind], "reload") == 0) {
1623
if (main_stop(0, 0, 0) == 0)
1624
return main_start(1, 0, 0);
1626
} else if (optind+2 == ac) {
1627
int number = strchr(av[optind+1], '-') == 0 ? 1 : 0;
1628
if (strcmp(av[optind], "activate") == 0)
1629
return main_start(1, av[optind+1], number);
1630
else if (strcmp(av[optind], "deactivate") == 0)
1631
return main_stop(0, av[optind+1], number);
1632
} else if (optind+3 == ac) {
1633
if (strcmp(av[optind], "activate") == 0)
1634
return main_start(1, av[optind+1], atoi(av[optind+2]));
1635
else if (strcmp(av[optind], "deactivate") == 0)
1636
return main_stop(0, av[optind+1], atoi(av[optind+2]));