File irda-0.9.18-findchip-ppc.diff of Package irda

Wed Feb 16 18:00:05 CET 2000 - uli@suse.de

- added support for PPC (untested, might work on CHRP and PReP)

--- findchip/findchip.c
+++ findchip/findchip.c
@@ -34,7 +34,16 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
+
+#ifdef __powerpc__
+#include <asm/io.h>
+unsigned long isa_io_base;
+#include <sys/mman.h>
+#include <fcntl.h>
+#else
 #include <sys/io.h> 
+#endif
+
 #include <string.h>
 
 #include "findchip.h"
@@ -122,10 +131,74 @@
 		}
 	}
 
+#ifdef __powerpc__
+  {
+       FILE *fd1;
+       int fd2;
+       unsigned char buffer[1024];
+       unsigned long phys_io_base=0;
+
+       fd1=fopen("/proc/cpuinfo","r");
+       if(fd1 == NULL)
+       {
+               printf("Cannot open /proc/cpuinfo, unable to determine architecture.\n");
+               exit(42);
+       }
+
+       while(fgets(buffer,1024,fd1))
+       {
+#ifdef PPCIODEBUG
+               printf("buffer: %s\n",buffer);
+#endif
+               if(strncmp(buffer,"machine",7)==0)
+               {
+#ifdef PPCIODEBUG
+                       printf("found\n");
+#endif
+                               if(strstr(buffer,"CHRP"))
+                        phys_io_base=CHRP_ISA_IO_BASE;
+                else if(strstr(buffer,"PReP") || strstr(buffer,"PREP"))
+                        phys_io_base=PREP_ISA_IO_BASE;
+               }
+       }
+       fclose(fd1);
+       if (phys_io_base==0)
+       {
+               printf("Unknown architecture (currently supported: CHRP, PREP)\n");
+               exit(43);
+               }
+
+       fd2=open("/dev/mem",O_RDWR);
+       if(fd2 < 0)
+       {
+               printf("Cannot open /dev/mem, unable to mmap IO space.\n");
+               exit(44);
+       }
+
+       isa_io_base=(unsigned int) mmap((caddr_t)0,
+                                       64<<10,
+                                       PROT_READ|PROT_WRITE,
+                                       MAP_SHARED,
+                                       fd2,
+                                       phys_io_base);
+
+       if(isa_io_base==(unsigned int)MAP_FAILED)
+       {
+               printf("mmap'ing IO space failed.\n");
+               close(fd2);
+               exit(45);
+       }
+
+       close(fd2);
+
+  }
+
+#else /* __powerpc__ */
 	if (ioperm(0x0, 0x3ff, 1)) {
 		perror("Set i/o permission");
 		exit(0);
 	}
+#endif
 
 	/* Probe the chips! */
 	do {