Subversion Repositories Kolibri OS

Rev

Rev 5078 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include <drm/drmP.h>
  3. #include <drm/radeon_drm.h>
  4. #include "radeon.h"
  5. #include "radeon_object.h"
  6.  
  7. extern int radeon_benchmarking;
  8.  
  9. static int my_atoi(char **cmd)
  10. {
  11.     char* p = *cmd;
  12.     int val = 0;
  13.  
  14.     for (;; *p++) {
  15.         switch (*p) {
  16.         case '0' ... '9':
  17.             val = 10*val+(*p-'0');
  18.             break;
  19.         default:
  20.             *cmd = p;
  21.             return val;
  22.         }
  23.     }
  24. }
  25.  
  26. char* parse_mode(char *p, videomode_t *mode)
  27. {
  28.     char c;
  29.  
  30.     while( (c = *p++) == ' ');
  31.  
  32.     if( c )
  33.     {
  34.         p--;
  35.  
  36.         mode->width = my_atoi(&p);
  37.         if(*p == 'x') p++;
  38.  
  39.         mode->height = my_atoi(&p);
  40.         if(*p == 'x') p++;
  41.  
  42.         mode->bpp = 32;
  43.  
  44.         mode->freq = my_atoi(&p);
  45.  
  46.         if( mode->freq == 0 )
  47.             mode->freq = 60;
  48.     }
  49.  
  50.     return p;
  51. };
  52.  
  53. char* parse_path(char *p, char *log)
  54. {
  55.     char  c;
  56.  
  57.     while( (c = *p++) == ' ');
  58.     p--;
  59.     while( (c = *log++ = *p++) && (c != ' '));
  60.     *log = 0;
  61.  
  62.     return p;
  63. };
  64.  
  65. void parse_cmdline(char *cmdline, videomode_t *mode, char *log, int *kms)
  66. {
  67.     char *p = cmdline;
  68.  
  69.     char c = *p++;
  70.  
  71.     while( c )
  72.     {
  73.         if( c == '-')
  74.         {
  75.             switch(*p++)
  76.             {
  77.                 case 'b':
  78.                     radeon_benchmarking = 1;
  79.                     break;
  80.  
  81.                 case 'l':
  82.                     p = parse_path(p, log);
  83.                     break;
  84.  
  85.                 case 'm':
  86.                     p = parse_mode(p, mode);
  87.                     break;
  88.  
  89.                 case 'n':
  90.                     *kms = 0;
  91.             };
  92.         };
  93.         c = *p++;
  94.     };
  95. };
  96.