Verständnisfrage zu cpmac_if.c Source7270 12043

MrXYZ

Mitglied
Mitglied seit
24 Mrz 2006
Beiträge
307
Punkte für Reaktionen
3
Punkte
18
Hallo!

In der cpmac-if.c steht folgendes,
Code:
 else {
        /* FIXME: At this moment there is no precise switch info yet! */
        char *hwrev = prom_getenv("HWRevision");
        /* W503V, Speedbridge, 7240, 7270v2 */
        if(hwrev && (   !(strncmp("136", hwrev, 3))
                     || !(strncmp("143", hwrev, 3))
                     || !(strncmp("144", hwrev, 3))
                     || !(strncmp("145", hwrev, 3))
                     )) {
            phy->cpmac_switch = AVM_CPMAC_SWITCH_AR8216;
        }
        switch(phy->cpmac_switch) {
            case AVM_CPMAC_SWITCH_ADM6996:
            case AVM_CPMAC_SWITCH_ADM6996L:
            case AVM_CPMAC_SWITCH_TANTOS:
            case AVM_CPMAC_SWITCH_ANY:
                sprintf(DevName, "cpmac%u", phy->instance);
                break;

            case AVM_CPMAC_SWITCH_AR8216:
            case AVM_CPMAC_SWITCH_NONE:
            default:
                sprintf(DevName, "eth%u", phy->instance);
                break;
Heißt das jetzt soviel, das ein Switchen der Ports mit cpmaccfg in der 7270 hwrev3 nicht möglich ist ,da ,soweit ich mitbekommen habe ,cpmaccfg für den ADM6996 geschrieben wurde.?
 
Hi,

leider habe ich keine Ahnung von cpmac. Der Codeausschnitt den du postest interpretier ich folgendermaßen:

Wenn in der Environment-Variable "HWRevision" die Zahl 136, 143, 144, 145 steht, wird phy->cpmac_switch mit dem Wert AVM_CPMAC_SWITCH_AR8216 überschrieben. Das hat dann Auswirkung auf den Device Namen (also ethX oder cpmacX).

Der Kommentar könnte sich also auf das Auslesen der Environment-Variable beziehen, da phy->cpmac_switch keine präzisen Informationen liefert.
 
Also sollten die Hardware Revisionen dann auch einen AR8216 verbaut haben ?
 
mach doch mal ein
Code:
echo $HWRevision
auf der Konsole.

Ich kenn mich damit zu wenig aus um dir genau zu sagen, was darin verbaut ist. Das ist schließlich nur ein Flag, welches den Device-Namen setzt (anhand des Codes zu urteilen.. der ist bestimmt länger).
 
Ich hab 122 und 139 und auf der Platine hab ich keinen AR8216 gefunden, scheint also damit was zu tun zu haben.
 
Zuletzt bearbeitet:
Der AR8216 könnte rein theoretisch auch Bestandteil eines anderes Chips sein, so dass man ihn dediziert nicht als Bauteil erkennt (ich hab jetzt aber noch nicht gegoogled - daher wirklich nur als theoretischen Einwurf beachten ;-)

Was ist eigentlich sagen wollte: cpmaccfg baut hauptsächlich auf das Interface des avm_cpmac-Treibers auf, nur das Auslesen/Setzen der Verbindungsgeschwindigkeit (10/100MBit HD/FD) schreibt direkt in Switch-Register. Alles andere sollte damit theoretisch auch mit anderen Switches gehen, solange AVM im Treiber die entsprechenden Funktionen anbietet.
 
Nun ja, mit Replace Kernel sollte ja dann theoretisch cpmaccfg gehen ,aber Essig is, Ohne Replace Kernel gabs wenigstens noch mit cpmaccfg info

Code:
Internal ports: 1
External ports: 4
Mit Replace Kernel kommt da nur noch
Code:
No Devices

Edit :Sollte eigentlich als Antwort hier rein http://www.ip-phone-forum.de/showthread.php?t=173626&goto=newpost
 
Zuletzt bearbeitet:
Code:
/var/mod/root # cpmaccfg gsmc
Devices: 1
WAN is port: (none)
Device 1: name=eth0, portmask=0x2f
MfG Oliver
 
Ohne Relace Kernel kommt das auch bei mir. Übrigens bringt ein

Code:
/var/mod/root # cpmaccfg gpme
Port 1: no link
Port 2: no link
Port 3: no autonegotiation, 100baseTx-FD flow-control, link ok
Port 4: no link
das, egal ob an den Ports was angeschlossen ist oder nicht
 
@MrXYZ
Laut Q-Code steht Tantos in gleichem switch-case wie auch ADM6996,
in 7270 ist ein Tantos verbaut: Infineon PSB 6970.
Laut Datenblatt von Infineon, ist das Tantos.
Dann muss das in cpmac_if.c so gehen :
Code:
else {
        /* FIXME: At this moment there is no precise switch info yet! */
        char *hwrev = prom_getenv("HWRevision");
        /* W503V, Speedbridge, 7240, 7270v2 */
        if(hwrev && (   !(strncmp("136", hwrev, 3))
                     || !(strncmp("143", hwrev, 3))
                     || !(strncmp("144", hwrev, 3))
                     || !(strncmp("145", hwrev, 3))
                     )) {
            phy->cpmac_switch = AVM_CPMAC_SWITCH_AR8216;
        }
        if(hwrev && (   !(strncmp("139", hwrev, 3)) // 7270 rev139 -> Infineon PSB 6970 = Tantos
                      )) {
            phy->cpmac_switch = AVM_CPMAC_SWITCH_TANTOS;
        }
        switch(phy->cpmac_switch) {
            case AVM_CPMAC_SWITCH_ADM6996:
            case AVM_CPMAC_SWITCH_ADM6996L:
            case AVM_CPMAC_SWITCH_TANTOS:
            case AVM_CPMAC_SWITCH_ANY:
                sprintf(DevName, "cpmac%u", phy->instance);
                break;

            case AVM_CPMAC_SWITCH_AR8216:
            case AVM_CPMAC_SWITCH_NONE:
            default:
                sprintf(DevName, "eth%u", phy->instance);
                break;
Wer kann das ausprobieren?
 
Geht da was nicht? Oder warum sollten wir das ändern?

MfG Oliver
 
Mit Replace Kernel und angeschlossenen Netzwerkkabeln, all in one soft

Code:
/var/mod/root # cpmaccfg info
ioctl: No such device
/var/mod/root # cpmaccfg gsmc
ioctl: No such device
/var/mod/root # cpmaccfg gpm
ioctl: No such device
/var/mod/root # cpmaccfg gpme 1
ioctl: No such device
/var/mod/root #

Aus dem Syslog
Code:
01:15:08 fritz user.info multid[9877]: startup ($Revision: 1.156 $$CompileDate: Aug 14 2008 14:22:35 $)
Jan  1 01:15:08 fritz user.err multid[9879]: if_setup: cpmac0: SIOCGIFFLAGS failed - No such device (19)
Jan  1 01:15:08 fritz user.err multid[9879]: cpmac_ioctl: 3 failed - No such device (19)

strace

Code:
/var/mod/root # strace cpmaccfg info
execve("/sbin/cpmaccfg", ["cpmaccfg", "info"], [/* 162 vars */]) = 0
svr4_syscall()                          = -1 ERRNO_4090 (Unknown error 4090)
open("/mod/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)open("/lib/libgcc_s.so.1", O_RDONLY)    = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=55452, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\340\30\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 122880, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aabe000old_mmap(0x2aabe000, 53908, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 4, 0) =
0x2aabe000
old_mmap(0x2aadb000, 1052, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0xd000) = 0x2aadb000
close(4)                                = 0
munmap(0x2aaae000, 4096)                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\360\251\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 466944, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aadc000old_mmap(0x2aadc000, 375588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 4, 0) =
 0x2aadc000
old_mmap(0x2ab47000, 8076, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x5b000) = 0x2ab47000
old_mmap(0x2ab49000, 18896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab49000
close(4)                                = 0
mprotect(0x2aadc000, 375588, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x2aaae000, 4096)                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 4
fstat(4, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
close(4)                                = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=22472, ...}) = 0
mprotect(0x2ab47000, 4096, PROT_READ)   = 0
mprotect(0x2aabc000, 4096, PROT_READ)   = 0
mprotect(0x2aadc000, 375588, PROT_READ|PROT_EXEC) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
ioctl(4, 0x89f0, 0x7f882cb8)            = -1 ENODEV (No such device)
write(2, "ioctl", 5ioctl)                    = 5
write(2, ": ", 2: )                       = 2
write(2, "No such device", 14No such device)          = 14
write(2, "\n", 1
)                       = 1
exit(1)                                 = ?
 
Zuletzt bearbeitet:
Was sagt denn ein "ifconfig -a"? Für mich sieht das erstmal so aus, als existiert kein cpmac0-Device, auf dem cpmaccfg standardmäßig operiert. Dies kann aber durch einen Parameter geändert werden, z.B. "cpmaccfg -i eth0 info". Was liefert denn das als Ausgabe?
--
Auf meiner 7270 mit AVM-Kernel (keine Labor) gehen folgende Befehle, d.h. liefern "plausible" Infos: info, gsm, gsmc. Nicht getestet: ssm, ssms, spme. Unbrauchbar/falsches Ergebnis liefert "gpme", denn das stimmt nicht mit der Realität und dem AVM-Webinterface überein (es kommt "no link" für Ports 1,2,4, "link" an Port 3, wobei das Kabel aber an Port 1 steckt).
 
Zuletzt bearbeitet:
Hallo!

Code:
cpmaccfg -i eth0 info
Internal ports: 1
External ports: 1

Code:
/var/mod/root # ifconfig -a
adsl      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:2000  Metric:1
          RX packets:1589 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1455 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:775699 (757.5 KiB)  TX bytes:207003 (202.1 KiB)

ath0      Link encap:Ethernet  HWaddr 00:1F:3F:0F:83:D6
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:2290  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:144 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:30681 (29.9 KiB)

dsl       Link encap:Point-to-Point Protocol
          inet addr:169.254.2.1  P-t-P:169.254.2.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP ALLMULTI MULTICAST  MTU:1500  Metric:1
          RX packets:343 errors:0 dropped:0 overruns:0 frame:0
          TX packets:338 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:46568 (45.4 KiB)  TX bytes:27618 (26.9 KiB)

eth0      Link encap:Ethernet  HWaddr 00:1F:3F:41:80:D3
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1
          RX packets:3732 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3973 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:364103 (355.5 KiB)  TX bytes:1132295 (1.0 MiB)

lan       Link encap:Ethernet  HWaddr 00:1F:3F:41:80:D3
          inet addr:192.168.178.1  Bcast:192.168.178.255  Mask:255.255.255.0
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1
          RX packets:3726 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3088 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:311543 (304.2 KiB)  TX bytes:456180 (445.4 KiB)

lan:0     Link encap:Ethernet  HWaddr 00:1F:3F:41:80:D3
          inet addr:169.254.1.1  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:531 errors:0 dropped:0 overruns:0 frame:0
          TX packets:531 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:49505 (48.3 KiB)  TX bytes:49505 (48.3 KiB)

wifi0     Link encap:Ethernet  HWaddr 00:1F:3F:0F:83:D6
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:182
          TX packets:170 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:38224 (37.3 KiB)
          Interrupt:80 Memory:c02a0000-c02b0000
 
Zuletzt bearbeitet:
Das bestätigt meine Vermutung, dass Du kein cpmac0 hast.
Da Stal-ker ja schon recherchiert hat, dass in der v3 offensichtlich TANTOS verbaut ist, würde ich die Erkennung (die 4 neuen Zeilen von Stal-ker) auch mal mit dazunehmen, wenn eine Quellcode-Recherche dies als aussichtsreich einstuft.
Die Frage ist nämlich, ob dazu an anderen Stellen im Treiber auch noch Anpassungen notwendig sind - ich kenne den TANTOS-CHip nicht, würde aber denken, dass der nicht kompatibel zum ADM6996 ist. AVM ist vielleicht mit der Treiberanpassung noch nicht soweit.
 
Ich hab mal einen patch erstellt mit Stalkers Angaben allerdings kommt das beim bauen. Könnte sich das mal jemand angucken. Der Patch läuft aber durch und das Image wird gebaut.


edit:
geänderter Patch ,trotzdem kommt das Ding mit der Line

Code:
----------------------------------------------------------------------
applying patch file make/linux/patches/2.6.19.2/cpmac-i_.c.patch
patching file linux-2.6.19.2/drivers/net/avm_cpmac/cpmac_if.c
patch unexpectedly ends in middle of line
Hunk #1 succeeded at 290 with fuzz 1.
----------------------------------------------------------------------
 

Anhänge

  • cpmac_if.c.patch.tar.gz
    427 Bytes · Aufrufe: 7
Zuletzt bearbeitet:
Vermutlich mein Kommentar ist nicht Patch – konform? (sorry, µS geschädigter)
Einfach entfernen, oder in /* */ einfügen
statt:
Code:
 // 7270 rev139 -> Infineon PSB 6970 = Tantos
so, oder ganz weg:
Code:
else {
        /* FIXME: At this moment there is no precise switch info yet! */
        char *hwrev = prom_getenv("HWRevision");
        /* W503V, Speedbridge, 7240, 7270v2 */
        if(hwrev && (   !(strncmp("136", hwrev, 3))
                     || !(strncmp("143", hwrev, 3))
                     || !(strncmp("144", hwrev, 3))
                     || !(strncmp("145", hwrev, 3))
                     )) {
            phy->cpmac_switch = AVM_CPMAC_SWITCH_AR8216;
        }
        /* 7270 rev139 -> Infineon PSB 6970 = Tantos*/
        if(hwrev && (   !(strncmp("139", hwrev, 3))
                      )) {
            phy->cpmac_switch = AVM_CPMAC_SWITCH_TANTOS;
        }
        switch(phy->cpmac_switch) {
            case AVM_CPMAC_SWITCH_ADM6996:
            case AVM_CPMAC_SWITCH_ADM6996L:
            case AVM_CPMAC_SWITCH_TANTOS:
            case AVM_CPMAC_SWITCH_ANY:
                sprintf(DevName, "cpmac%u", phy->instance);
                break;

            case AVM_CPMAC_SWITCH_AR8216:
            case AVM_CPMAC_SWITCH_NONE:
            default:
                sprintf(DevName, "eth%u", phy->instance);
                break;
 
Zuletzt bearbeitet:
AVM ist vielleicht mit der Treiberanpassung noch nicht soweit.

So langsam scheint sich das zu bewahrheiten ,darauf könnte auch der Kommentar von AVM hindeuten.

Code:
/* FIXME: At this moment there is no precise switch info yet! */
siehe 1.Beitrag

@ Stalker
patch geändert, gleiche Aussage

Edit:
Mit der neuen All in One hab ich wieder cpmac0 .cpmaccfg verhält sich jetzt genauso mit Replace Kernel ,wie ohne Replace Kernel.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.