Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide
[cascardo/linux.git] / arch / mips / loongson / common / machtype.c
1 /*
2  * Copyright (C) 2009 Lemote Inc.
3  * Author: Wu Zhangjin, wuzhangjin@gmail.com
4  *
5  * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
6  *
7  * This program is free software; you can redistribute  it and/or modify it
8  * under  the terms of  the GNU General  Public License as published by the
9  * Free Software Foundation;  either version 2 of the  License, or (at your
10  * option) any later version.
11  */
12 #include <linux/errno.h>
13 #include <asm/bootinfo.h>
14
15 #include <loongson.h>
16 #include <machine.h>
17
18 /* please ensure the length of the machtype string is less than 50 */
19 #define MACHTYPE_LEN 50
20
21 static const char *system_types[] = {
22         [MACH_LOONGSON_UNKNOWN]         "unknown loongson machine",
23         [MACH_LEMOTE_FL2E]              "lemote-fuloong-2e-box",
24         [MACH_LEMOTE_FL2F]              "lemote-fuloong-2f-box",
25         [MACH_LEMOTE_ML2F7]             "lemote-mengloong-2f-7inches",
26         [MACH_LEMOTE_YL2F89]            "lemote-yeeloong-2f-8.9inches",
27         [MACH_DEXXON_GDIUM2F10]         "dexxon-gdium-2f",
28         [MACH_LEMOTE_NAS]               "lemote-nas-2f",
29         [MACH_LEMOTE_LL2F]              "lemote-lynloong-2f",
30         [MACH_LEMOTE_A1004]             "lemote-3a-notebook-a1004",
31         [MACH_LEMOTE_A1101]             "lemote-3a-itx-a1101",
32         [MACH_LEMOTE_A1201]             "lemote-2gq-notebook-a1201",
33         [MACH_LEMOTE_A1205]             "lemote-2gq-aio-a1205",
34         [MACH_LOONGSON_END]             NULL,
35 };
36
37 const char *get_system_type(void)
38 {
39         return system_types[mips_machtype];
40 }
41
42 void __weak __init mach_prom_init_machtype(void)
43 {
44 }
45
46 void __init prom_init_machtype(void)
47 {
48         char *p, str[MACHTYPE_LEN + 1];
49         int machtype = MACH_LEMOTE_FL2E;
50
51         mips_machtype = LOONGSON_MACHTYPE;
52
53         p = strstr(arcs_cmdline, "machtype=");
54         if (!p) {
55                 mach_prom_init_machtype();
56                 return;
57         }
58         p += strlen("machtype=");
59         strncpy(str, p, MACHTYPE_LEN);
60         str[MACHTYPE_LEN] = '\0';
61         p = strstr(str, " ");
62         if (p)
63                 *p = '\0';
64
65         for (; system_types[machtype]; machtype++)
66                 if (strstr(system_types[machtype], str)) {
67                         mips_machtype = machtype;
68                         break;
69                 }
70 }