Subversion Repositories Kolibri OS

Rev

Rev 1404 | Rev 5078 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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