TinLethax

Tektronix AFG3000C model pin strapping and sysconfig flags

Dec 15th, 2025
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.16 KB | Source Code | 0 0
  1. sysconfig bit
  2. bit         Fucntion        Bit Mask
  3. 0           isDualChannel   0x01
  4. 1           is25Mhz         0x02
  5. 2           is100MHz        0x04
  6. 3           is240Mhz        0x08
  7. 4           isColorLCD      0x10
  8. 5           hasGoC          0x20
  9. 6           isBmodel        0x40
  10. 7           is10Mhz         0x80
  11.  
  12. 8           isServiceMode   0x100
  13. 9           hasGPIBhasLan   0x200
  14. 10
  15. 11
  16. 12          isNotRamdisk    0x1000
  17. 13          isStandalone    0x2000
  18. 14
  19. 15          isLAN9220       0x8000
  20.  
  21. 16
  22. 17          is50Mhz         0x20000
  23. 18          is150Mhz        0x40000
  24. 19
  25. 20
  26. 21
  27. 22
  28. 23
  29.  
  30. 24
  31. 25
  32. 26
  33. 27
  34. 28
  35. 29
  36. 30
  37. 31
  38.  
  39. uint getGpioCode(void)
  40.  
  41. {
  42.                     /* read GPIO3_0(ball P2),
  43.                        GPIO2_31 (ball P3),
  44.                        GPIO2_30 (ball R1)
  45.                        and GPIO2_29 (ball N4) */
  46.   return (_GPIO3_DR & 1) << 3 | _GPIO2_DR >> 29;
  47. }
  48.  
  49. int sysconfigInit(void)
  50.  
  51. {
  52.   int memFD;
  53.   int *piVar1;
  54.   char *pcVar2;
  55.   int iVar3;
  56.   uint16_t auStack_20 [3];
  57.   uint modelConfiguration;
  58.  
  59.   systemConfigurationFlagClear(0xffffffff);
  60.   systemConfigurationFlagSet(0x10);
  61.   systemConfigurationFlagSet(0x200);
  62.   systemConfigurationFlagSet(0x2000);
  63.   afgFilehandler = open("/dev/AfgDrvs",0x1002);
  64.   fcntl(afgFilehandler,2,1);
  65.   if (afgFilehandler == -1) {
  66.     perror("open /dev/AfgDrvs");
  67.   }
  68.   else {
  69.     memFD = open("/dev/mem",0x1002);
  70.     if (memFD == -1) {
  71.       printf("open /dev/mem failed\n");
  72.     }
  73.     else {
  74.       memWEIM_CS0_GoCBase_A0000000h = mmap((void *)0x0,0x4000000,3,1,memFD,0xa0000000);
  75.       if (((int)memWEIM_CS0_GoCBase_A0000000h - 1U < 0xfffffffe) &&
  76.          (memGPIO1_53FCC000h = mmap((void *)0x0,0x20,3,1,memFD,0x53fcc000),
  77.          (int)memGPIO1_53FCC000h - 1U < 0xfffffffe)) {
  78.         close(memFD);
  79.       }
  80.       else {
  81.         piVar1 = __errno_location();
  82.         pcVar2 = strerror(*piVar1);
  83.         printf("mmap adg base failed %s, %d\n",pcVar2,*piVar1);
  84.       }
  85.     }
  86.   }
  87.   if (afgFilehandler == -1) {
  88.     perror("fd_Misc in configRead");
  89. switchD_00148a8c_strapingReadError:
  90.                     /* AFG3102C */
  91.     systemConfigurationFlagSet(4);
  92.     systemConfigurationFlagSet(1);
  93.     memFD = -1;
  94.   }
  95.   else {
  96.                     /* get GPIO strapping
  97.                        getGpioCode() */
  98.     memFD = ioctl(afgFilehandler,0x4441000e,&modelConfiguration);
  99.     if (memFD != 0) {
  100.       perror("ioctl AFG_GPIO_CODE_GET");
  101.       goto switchD_00148a8c_strapingReadError;
  102.     }
  103.     switch(modelConfiguration & 0xd) {
  104.     case 0:
  105.                     /* AFG3051C/AFG3052C */
  106.       systemConfigurationFlagSet(0x20000);
  107.       break;
  108.     case 1:
  109.                     /* AFG3021C/AFG3022C */
  110.       systemConfigurationFlagSet(2);
  111.       systemConfigurationFlagSet(0x40);
  112.       break;
  113.     default:
  114.       goto switchD_00148a8c_strapingReadError;
  115.     case 4:
  116.                     /* AFG3151C/AFG3152C */
  117.       systemConfigurationFlagSet(0x40000);
  118.       break;
  119.     case 5:
  120.                     /* AFG3101C/AFG3102C */
  121.       systemConfigurationFlagSet(4);
  122.       break;
  123.     case 9:
  124.                     /* AFG3251C/AFG3252C */
  125.       systemConfigurationFlagSet(8);
  126.       break;
  127.     case 0xd:
  128.                     /* AFG3011C */
  129.       systemConfigurationFlagSet(0x80);
  130.     }
  131.     if ((modelConfiguration & 2) == 0) {
  132.       systemConfigurationFlagSet(1);
  133.       memFD = 0;
  134.     }
  135.     else {
  136.       memFD = 0;
  137.     }
  138.   }
  139.   frontPanel_readButton(auStack_20);
  140.   if (auStack_20[2] == 0) goto LAB_00148b50;
  141.   if (auStack_20[2] != 0x80) goto switchD_00148c08_caseD_b;
  142.   switch(auStack_20[1]) {
  143.   case 9:
  144.     flashUpdateSecureSmth1();
  145.     break;
  146.   case 10:
  147.                     /* AFG3021C */
  148.     systemConfigurationFlagClear(1);
  149.     systemConfigurationFlagClear(0x80);
  150.     systemConfigurationFlagSet(2);
  151.     systemConfigurationFlagSet(0x40);
  152.     systemConfigurationFlagClear(4);
  153.     systemConfigurationFlagClear(8);
  154.     systemConfigurationFlagClear(0x20000);
  155.     systemConfigurationFlagSet(0x10);
  156.     systemConfigurationFlagSet(0x200);
  157.     systemConfigurationFlagSet(0x100);
  158.     goto LAB_00148b50;
  159.   case 0x10:
  160.     systemConfigurationFlagClear(1);
  161.     systemConfigurationFlagSet(0x80);
  162.     systemConfigurationFlagClear(2);
  163.     systemConfigurationFlagClear(0x40);
  164.     goto LAB_00148d84;
  165.   case 0x11:
  166.                     /* AFG3101C */
  167.     systemConfigurationFlagClear(1);
  168.     goto LAB_00148da8;
  169.   case 0x19:
  170.                     /* AFG3251C */
  171.     systemConfigurationFlagClear(1);
  172.     goto LAB_00148d30;
  173.   case 0x21:
  174.                     /* AFG3102C */
  175.     systemConfigurationFlagSet(1);
  176. LAB_00148da8:
  177.     systemConfigurationFlagClear(0x80);
  178.     systemConfigurationFlagClear(2);
  179.     systemConfigurationFlagClear(0x40);
  180.     systemConfigurationFlagSet(4);
  181.     systemConfigurationFlagClear(8);
  182.     systemConfigurationFlagClear(0x20000);
  183.     goto LAB_00148d00;
  184.   case 0x22:
  185.     systemConfigurationFlagSet(1);
  186.     systemConfigurationFlagClear(0x80);
  187.     systemConfigurationFlagSet(2);
  188.     systemConfigurationFlagSet(0x40);
  189. LAB_00148d84:
  190.     systemConfigurationFlagClear(4);
  191.     systemConfigurationFlagClear(8);
  192.     systemConfigurationFlagClear(0x20000);
  193. LAB_00148d00:
  194.     systemConfigurationFlagSet(0x10);
  195.     systemConfigurationFlagSet(0x200);
  196.     systemConfigurationFlagSet(0x100);
  197.     break;
  198.   case 0x29:
  199.                     /* AFG3252C */
  200.     systemConfigurationFlagSet(1);
  201. LAB_00148d30:
  202.     systemConfigurationFlagClear(0x80);
  203.     systemConfigurationFlagClear(2);
  204.     systemConfigurationFlagClear(0x40);
  205.     systemConfigurationFlagClear(4);
  206.     systemConfigurationFlagSet(8);
  207.     systemConfigurationFlagClear(0x20000);
  208.     goto LAB_00148d00;
  209.   case 0x2a:
  210.                     /* AFG3051C */
  211.     systemConfigurationFlagClear(1);
  212.     goto LAB_00148cd0;
  213.   case 0x31:
  214.                     /* AFG3051C */
  215.     systemConfigurationFlagSet(1);
  216. LAB_00148cd0:
  217.     systemConfigurationFlagClear(0x80);
  218.     systemConfigurationFlagClear(2);
  219.     systemConfigurationFlagClear(0x40);
  220.     systemConfigurationFlagClear(4);
  221.     systemConfigurationFlagClear(8);
  222.     systemConfigurationFlagSet(0x20000);
  223.     goto LAB_00148d00;
  224.   }
  225. switchD_00148c08_caseD_b:
  226.   if ((auStack_20[2] == 0x40) && (auStack_20[1] == 0x22)) {
  227.     systemConfigurationFlagSet(SYSCFG_SERVICEMODE);
  228.   }
  229. LAB_00148b50:
  230.   iVar3 = isInServiceMode();
  231.   if (iVar3 != 0) {
  232.     startXinetd();
  233.   }
  234.   return memFD;
  235. }
  236.  
Advertisement
Add Comment
Please, Sign In to add comment