// File: /workspace/github_cpp_makefile_star2_O1/mrlordkaj[P]i2cdevlib-pi/Arduino/wiringPi/wiringPi.c
// Function: piGpioLayout
int piGpioLayout (void)
{
  FILE *cpuFd ;
  char line [120] ;
  char *c ;
  static int  gpioLayout = -1 ;

  if (gpioLayout != -1)	// No point checking twice
    return gpioLayout ;

  if ((cpuFd = fopen ("/proc/cpuinfo", "r")) == NULL)
    piGpioLayoutOops ("Unable to open /proc/cpuinfo") ;

// Start by looking for the Architecture to make sure we're really running
//	on a Pi. I'm getting fed-up with people whinging at me because
//	they can't get it to work on weirdFruitPi boards...

  while (fgets (line, 120, cpuFd) != NULL)
    if (strncmp (line, "Hardware", 8) == 0)
      break ;

  if (strncmp (line, "Hardware", 8) != 0)
    piGpioLayoutOops ("No \"Hardware\" line") ;

  if (wiringPiDebug)
    printf ("piGpioLayout: Hardware: %s\n", line) ;

// See if it's BCM2708 or BCM2709 or the new BCM2835.

// OK. As of Kernel 4.8,  we have BCM2835 only, regardless of model.
//	However I still want to check because it will trap the cheapskates and rip-
//	off merchants who want to use wiringPi on non-Raspberry Pi platforms - which
//	I do not support so don't email me your bleating whinges about anything
//	other than a genuine Raspberry Pi.

#ifdef	DONT_CARE_ANYMORE
  if (! (strstr (line, "BCM2708") || strstr (line, "BCM2709") || strstr (line, "BCM2835")))
  {
    fprintf (stderr, "Unable to determine hardware version. I see: %s,\n", line) ;
    fprintf (stderr, " - expecting BCM2708, BCM2709 or BCM2835.\n") ;
    fprintf (stderr, "If this is a genuine Raspberry Pi then please report this\n") ;
    fprintf (stderr, "at GitHub.com/wiringPi/wiringPi. If this is not a Raspberry Pi then you\n") ;
    fprintf (stderr, "are on your own as wiringPi is designed to support the\n") ;
    fprintf (stderr, "Raspberry Pi ONLY.\n") ;
    exit (EXIT_FAILURE) ;
  }
#endif

// Actually... That has caused me more than 10,000 emails so-far. Mosty by
//	people who think they know better by creating a statically linked
//	version that will not run with a new 4.9 kernel. I utterly hate and
//	despise those people.
//
//	I also get bleats from people running other than Raspbian with another
//	distros compiled kernel rather than a foundation compiled kernel, so
//	this might actually help them. It might not - I only have the capacity
//	to support Raspbian.
//
//	However, I've decided to leave this check out and rely purely on the
//	Revision: line for now. It will not work on a non-pi hardware or weird
//	kernels that don't give you a suitable revision line.

// So - we're Probably on a Raspberry Pi. Check the revision field for the real
//	hardware type
//	In-future, I ought to use the device tree as there are now Pi entries in
//	/proc/device-tree/ ...
//	but I'll leave that for the next revision. Or the next.

// Isolate the Revision line

  rewind (cpuFd) ;
  while (fgets (line, 120, cpuFd) != NULL)
    if (strncmp (line, "Revision", 8) == 0)
      break ;

  fclose (cpuFd) ;

  if (strncmp (line, "Revision", 8) != 0)
    piGpioLayoutOops ("No \"Revision\" line") ;

// Chomp trailing CR/NL

  for (c = &line [strlen (line) - 1] ; (*c == '\n') || (*c == '\r') ; --c)
    *c = 0 ;

  if (wiringPiDebug)
    printf ("piGpioLayout: Revision string: %s\n", line) ;

// Scan to the first character of the revision number

  for (c = line ; *c ; ++c)
    if (*c == ':')
      break ;

  if (*c != ':')
    piGpioLayoutOops ("Bogus \"Revision\" line (no colon)") ;

// Chomp spaces

  ++c ;
  while (isspace (*c))
    ++c ;

  if (!isxdigit (*c))
    piGpioLayoutOops ("Bogus \"Revision\" line (no hex digit at start of revision)") ;

// Make sure its long enough

  if (strlen (c) < 4)
    piGpioLayoutOops ("Bogus revision line (too small)") ;

// Isolate  last 4 characters: (in-case of overvolting or new encoding scheme)

  c = c + strlen (c) - 4 ;

  if (wiringPiDebug)
    printf ("piGpioLayout: last4Chars are: \"%s\"\n", c) ;

  if ( (strcmp (c, "0002") == 0) || (strcmp (c, "0003") == 0))
    gpioLayout = 1 ;
  else
    gpioLayout = 2 ;	// Covers everything else from the B revision 2 to the B+, the Pi v2, v3, zero and CM's.

  if (wiringPiDebug)
    printf ("piGpioLayoutOops: Returning revision: %d\n", gpioLayout) ;

  return gpioLayout ;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x78, %rsp
movl 0x24422(%rip), %eax     # 0x47770
cmpl $-0x1, %eax
jne 0x23509
leaq 0x1235d(%rip), %rdi     # 0x356bb
leaq 0x12345(%rip), %rsi     # 0x356aa
callq 0x1f6c0
testq %rax, %rax
je 0x23521
movq %rax, %r14
movq %rsp, %rbx
movabsq $0x6572617764726148, %r15 # imm = 0x6572617764726148
movq %rbx, %rdi
movl $0x78, %esi
movq %r14, %rdx
callq 0x1f940
movq (%rsp), %rcx
testq %rax, %rax
je 0x233a1
cmpq %r15, %rcx
jne 0x23383
cmpq %r15, %rcx
jne 0x2352d
movq 0x23baf(%rip), %r15     # 0x46f60
cmpl $0x0, (%r15)
je 0x233c8
leaq 0x1231e(%rip), %rdi     # 0x356dc
movq %rsp, %rsi
xorl %eax, %eax
callq 0x1f050
movabsq $0x6e6f697369766552, %r12 # imm = 0x6E6F697369766552
movq %r14, %rdi
callq 0x1f080
movq %rsp, %rbx
movq %rbx, %rdi
movl $0x78, %esi
movq %r14, %rdx
callq 0x1f940
testq %rax, %rax
je 0x233f8
cmpq %r12, (%rsp)
jne 0x233dd
movq %r14, %rdi
callq 0x1f5b0
cmpq %r12, (%rsp)
jne 0x23539
movq %rbx, %rdi
callq 0x1f200
addq %rbx, %rax
decq %rax
movzbl (%rax), %ecx
cmpl $0xd, %ecx
je 0x23425
cmpl $0xa, %ecx
jne 0x2342d
movb $0x0, (%rax)
decq %rax
jmp 0x23418
cmpl $0x0, (%r15)
je 0x23451
leaq 0x122d1(%rip), %rdi     # 0x3570b
movq %rsp, %rsi
xorl %eax, %eax
callq 0x1f050
jmp 0x23451
testl %eax, %eax
je 0x23515
incq %rbx
movzbl (%rbx), %eax
cmpl $0x3a, %eax
jne 0x23446
callq 0x1f650
movq (%rax), %rax
movsbq 0x1(%rbx), %rcx
incq %rbx
movzwl (%rax,%rcx,2), %ecx
btl $0xd, %ecx
jb 0x23461
btl $0xc, %ecx
jae 0x23545
movq %rbx, %rdi
callq 0x1f200
cmpq $0x3, %rax
jbe 0x23551
movq %rbx, %rdi
callq 0x1f200
addq %rax, %rbx
addq $-0x4, %rbx
cmpl $0x0, (%r15)
je 0x234b5
leaq 0x122fe(%rip), %rdi     # 0x357a9
movq %rbx, %rsi
xorl %eax, %eax
callq 0x1f050
leaq 0x12311(%rip), %rsi     # 0x357cd
movq %rbx, %rdi
callq 0x1f820
testl %eax, %eax
je 0x234e4
leaq 0x12303(%rip), %rsi     # 0x357d2
movq %rbx, %rdi
callq 0x1f820
cmpl $0x1, %eax
movl $0x2, %esi
sbbl $0x0, %esi
jmp 0x234e9
movl $0x1, %esi
movl %esi, 0x24281(%rip)     # 0x47770
cmpl $0x0, (%r15)
je 0x23503
leaq 0x122db(%rip), %rdi     # 0x357d7
xorl %eax, %eax
callq 0x1f050
movl 0x24267(%rip), %eax     # 0x47770
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x12212(%rip), %rdi     # 0x3572e
callq 0x2355d
leaq 0x12184(%rip), %rdi     # 0x356ac
callq 0x2355d
leaq 0x12195(%rip), %rdi     # 0x356c9
callq 0x2355d
leaq 0x121b8(%rip), %rdi     # 0x356f8
callq 0x2355d
leaq 0x12203(%rip), %rdi     # 0x3574f
callq 0x2355d
leaq 0x12231(%rip), %rdi     # 0x35789
callq 0x2355d