Subversion Repositories Kolibri OS

Rev

Rev 1404 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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