Home | History | Annotate | Download | only in x86
      1 /*
      2  * Author: Thomas Ingleby <thomas.c.ingleby (at) intel.com>
      3  *         Brendan Le Foll <brendan.le.foll (at) intel.com>
      4  * Copyright (c) 2014-2016 Intel Corporation.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining
      7  * a copy of this software and associated documentation files (the
      8  * "Software"), to deal in the Software without restriction, including
      9  * without limitation the rights to use, copy, modify, merge, publish,
     10  * distribute, sublicense, and/or sell copies of the Software, and to
     11  * permit persons to whom the Software is furnished to do so, subject to
     12  * the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be
     15  * included in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     20  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     21  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     22  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     23  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  */
     25 
     26 #include <stdlib.h>
     27 #include <string.h>
     28 
     29 #include "mraa_internal.h"
     30 
     31 #include "x86/intel_galileo_rev_d.h"
     32 #include "x86/intel_galileo_rev_g.h"
     33 #include "x86/intel_edison_fab_c.h"
     34 #include "x86/intel_de3815.h"
     35 #include "x86/intel_nuc5.h"
     36 #include "x86/intel_minnow_byt_compatible.h"
     37 #include "x86/intel_sofia_3gr.h"
     38 
     39 mraa_platform_t
     40 mraa_x86_platform()
     41 {
     42 #ifndef MRAA_PLATFORM_FORCE
     43     mraa_platform_t platform_type = MRAA_UNKNOWN_PLATFORM;
     44 
     45     char* line = NULL;
     46     // let getline allocate memory for *line
     47     size_t len = 0;
     48     FILE* fh = fopen("/sys/devices/virtual/dmi/id/board_name", "r");
     49     if (fh != NULL) {
     50         if (getline(&line, &len, fh) != -1) {
     51             if (strncmp(line, "GalileoGen2", 11) == 0) {
     52                 platform_type = MRAA_INTEL_GALILEO_GEN2;
     53                 plat = mraa_intel_galileo_gen2();
     54             } else if (strncmp(line, "BODEGA BAY", 10) == 0) {
     55                 platform_type = MRAA_INTEL_EDISON_FAB_C;
     56                 plat = mraa_intel_edison_fab_c();
     57             } else if (strncmp(line, "SALT BAY", 8) == 0) {
     58                 platform_type = MRAA_INTEL_EDISON_FAB_C;
     59                 plat = mraa_intel_edison_fab_c();
     60             } else if (strncmp(line, "DE3815", 6) == 0) {
     61                 platform_type = MRAA_INTEL_DE3815;
     62                 plat = mraa_intel_de3815();
     63             } else if (strncmp(line, "NUC5i5MYBE", 10) == 0 || strncmp(line, "NUC5i3MYBE", 10) == 0) {
     64                 platform_type = MRAA_INTEL_NUC5;
     65                 plat = mraa_intel_nuc5();
     66             } else if (strncmp(line, "NOTEBOOK", 8) == 0) {
     67                 platform_type = MRAA_INTEL_MINNOWBOARD_MAX;
     68                 plat = mraa_intel_minnowboard_byt_compatible(0);
     69             } else if (strncasecmp(line, "MinnowBoard MAX", 15) == 0) {
     70                 platform_type = MRAA_INTEL_MINNOWBOARD_MAX;
     71                 plat = mraa_intel_minnowboard_byt_compatible(0);
     72             } else if (strncasecmp(line, "Galileo", 7) == 0) {
     73                 platform_type = MRAA_INTEL_GALILEO_GEN1;
     74                 plat = mraa_intel_galileo_rev_d();
     75             } else if (strncasecmp(line, "MinnowBoard Compatible", 22) == 0) {
     76                 platform_type = MRAA_INTEL_MINNOWBOARD_MAX;
     77                 plat = mraa_intel_minnowboard_byt_compatible(1);
     78             } else if (strncasecmp(line, "MinnowBoard Turbot", 18) == 0) {
     79                 platform_type = MRAA_INTEL_MINNOWBOARD_MAX;
     80                 plat = mraa_intel_minnowboard_byt_compatible(1);
     81             } else {
     82                 syslog(LOG_ERR, "Platform not supported, not initialising");
     83                 platform_type = MRAA_UNKNOWN_PLATFORM;
     84             }
     85             free(line);
     86         }
     87         fclose(fh);
     88     } else {
     89         fh = fopen("/proc/cmdline", "r");
     90         if (fh != NULL) {
     91             if (getline(&line, &len, fh) != -1) {
     92                 if (strstr(line, "sf3gr_mrd_version=P2.0")) {
     93                     platform_type = MRAA_INTEL_SOFIA_3GR;
     94                     plat = mraa_intel_sofia_3gr();
     95                 }
     96                 free(line);
     97             }
     98             fclose(fh);
     99         }
    100     }
    101     return platform_type;
    102 #else
    103     #if defined(xMRAA_INTEL_GALILEO_GEN2)
    104     plat = mraa_intel_galileo_gen2();
    105     #elif defined(xMRAA_INTEL_EDISON_FAB_C)
    106     plat = mraa_intel_edison_fab_c();
    107     #elif defined(xMRAA_INTEL_DE3815)
    108     plat = mraa_intel_de3815();
    109     #elif defined(xMRAA_INTEL_MINNOWBOARD_MAX)
    110     plat = mraa_intel_minnowboard_byt_compatible();
    111     #elif defined(xMRAA_INTEL_GALILEO_GEN1)
    112     plat = mraa_intel_galileo_rev_d();
    113     #elif defined(xMRAA_INTEL_NUC5)
    114     plat = mraa_intel_nuc5();
    115     #elif defined(xMRAA_INTEL_SOFIA_3GR)
    116     plat = mraa_intel_sofia_3gr();
    117     #else
    118         #error "Not using a valid platform value from mraa_platform_t - cannot compile"
    119     #endif
    120     return MRAA_PLATFORM_FORCE;
    121 #endif
    122 }
    123