kos_sys/dc/
flashrom.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Rust for KallistiOS/Dreamcast
// Copyright (C) 2024 Eric Fradella
// https://dreamcast.rs/

use crate::prelude::*;

pub const FLASHROM_PT_SYSTEM: c_int         = 0;
pub const FLASHROM_PT_RESERVED: c_int       = 1;
pub const FLASHROM_PT_BLOCK_1: c_int        = 2;
pub const FLASHROM_PT_SETTINGS: c_int       = 3;
pub const FLASHROM_PT_BLOCK_2: c_int        = 4;

pub const FLASHROM_B1_SYSCFG: c_int         = 0x05;
pub const FLASHROM_B1_PW_SETTINGS_1: c_int  = 0x80;
pub const FLASHROM_B1_PW_SETTINGS_2: c_int  = 0x81;
pub const FLASHROM_B1_PW_SETTINGS_3: c_int  = 0x82;
pub const FLASHROM_B1_PW_SETTINGS_4: c_int  = 0x83;
pub const FLASHROM_B1_PW_SETTINGS_5: c_int  = 0x84;
pub const FLASHROM_B1_PW_PPP1: c_int        = 0xC0;
pub const FLASHROM_B1_PW_PPP2: c_int        = 0xC1;
pub const FLASHROM_B1_PW_DNS: c_int         = 0xC2;
pub const FLASHROM_B1_PW_EMAIL1: c_int      = 0xC3;
pub const FLASHROM_B1_PW_EMAIL2: c_int      = 0xC4;
pub const FLASHROM_B1_PW_EMAIL_PROXY: c_int = 0xC5;
pub const FLASHROM_B1_DK_PPP1: c_int        = 0xC6;
pub const FLASHROM_B1_DK_PPP2: c_int        = 0xC7;
pub const FLASHROM_B1_DK_DNS: c_int         = 0xC8;
pub const FLASHROM_B1_IP_SETTINGS: c_int    = 0xE0;
pub const FLASHROM_B1_EMAIL: c_int          = 0xE2;
pub const FLASHROM_B1_SMTP: c_int           = 0xE4;
pub const FLASHROM_B1_POP3: c_int           = 0xE5;
pub const FLASHROM_B1_POP3LOGIN: c_int      = 0xE6;
pub const FLASHROM_B1_POP3PASSWD: c_int     = 0xE7;
pub const FLASHROM_B1_PPPLOGIN: c_int       = 0xE8;
pub const FLASHROM_B1_PPPPASSWD: c_int      = 0xE9;
pub const FLASHROM_B1_PPPMODEM: c_int       = 0xEB;

pub const FLASHROM_OFFSET_CRC: c_int        = 62;

pub const FLASHROM_ERR_NONE: c_int          = 0;
pub const FLASHROM_ERR_NOT_FOUND: c_int     = -1;
pub const FLASHROM_ERR_NO_PARTITION: c_int  = -2;
pub const FLASHROM_ERR_READ_PART: c_int     = -3;
pub const FLASHROM_ERR_BAD_MAGIC: c_int     = -4;
pub const FLASHROM_ERR_BOGUS_PART: c_int    = -5;
pub const FLASHROM_ERR_NOMEM: c_int         = -6;
pub const FLASHROM_ERR_READ_BITMAP: c_int   = -7;
pub const FLASHROM_ERR_EMPTY_PART: c_int    = -8;
pub const FLASHROM_ERR_READ_BLOCK: c_int    = -9;

pub const FLASHROM_LANG_JAPANESE: c_int     = 0;
pub const FLASHROM_LANG_ENGLISH: c_int      = 1;
pub const FLASHROM_LANG_GERMAN: c_int       = 2;
pub const FLASHROM_LANG_FRENCH: c_int       = 3;
pub const FLASHROM_LANG_SPANISH: c_int      = 4;
pub const FLASHROM_LANG_ITALIAN: c_int      = 5;

#[repr(C)]
pub struct flashrom_syscfg_t {
    language:       c_int,
    audio:          c_int,
    autostart:      c_int,
}

pub const FLASHROM_REGION_UNKNOWN: c_int    = 0;
pub const FLASHROM_REGION_JAPAN: c_int      = 1;
pub const FLASHROM_REGION_US: c_int         = 2;
pub const FLASHROM_REGION_EUROPE: c_int     = 3;

pub const FLASHROM_ISP_DIALUP: c_int        = 0;
pub const FLASHROM_ISP_DHCP: c_int          = 1;
pub const FLASHROM_ISP_PPPOE: c_int         = 2;
pub const FLASHROM_ISP_STATIC: c_int        = 3;

pub const FLASHROM_ISP_IP: u32              = 1 <<  0;
pub const FLASHROM_ISP_NETMASK: u32         = 1 <<  1;
pub const FLASHROM_ISP_BROADCAST: u32       = 1 <<  2;
pub const FLASHROM_ISP_GATEWAY: u32         = 1 <<  3;
pub const FLASHROM_ISP_DNS: u32             = 1 <<  4;
pub const FLASHROM_ISP_HOSTNAME: u32        = 1 <<  5;
pub const FLASHROM_ISP_EMAIL: u32           = 1 <<  6;
pub const FLASHROM_ISP_SMTP: u32            = 1 <<  7;
pub const FLASHROM_ISP_POP3: u32            = 1 <<  8;
pub const FLASHROM_ISP_POP3_USER: u32       = 1 <<  9;
pub const FLASHROM_ISP_POP3_PASS: u32       = 1 << 10;
pub const FLASHROM_ISP_PROXY_HOST: u32      = 1 << 11;
pub const FLASHROM_ISP_PROXY_PORT: u32      = 1 << 12;
pub const FLASHROM_ISP_PPP_USER: u32        = 1 << 13;
pub const FLASHROM_ISP_PPP_PASS: u32        = 1 << 14;
pub const FLASHROM_ISP_OUT_PREFIX: u32      = 1 << 15;
pub const FLASHROM_ISP_CW_PREFIX: u32       = 1 << 16;
pub const FLASHROM_ISP_REAL_NAME: u32       = 1 << 17;
pub const FLASHROM_ISP_MODEM_INIT: u32      = 1 << 18;
pub const FLASHROM_ISP_AREA_CODE: u32       = 1 << 19;
pub const FLASHROM_ISP_LD_PREFIX: u32       = 1 << 20;
pub const FLASHROM_ISP_PHONE1: u32          = 1 << 21;
pub const FLASHROM_ISP_PHONE2: u32          = 1 << 22;

pub const FLASHROM_ISP_DIAL_AREACODE: u32   = 1 <<  0;
pub const FLASHROM_ISP_USE_PROXY: u32       = 1 <<  1;
pub const FLASHROM_ISP_PULSE_DIAL: u32      = 1 <<  2;
pub const FLASHROM_ISP_BLIND_DIAL: u32      = 1 <<  3;

#[repr(C)]
pub struct flashrom_ispcfg_t {
    method:         c_int,
    valid_fields:   u32,
    flags:          u32,
    ip:             [u8; 4],
    nm:             [u8; 4],
    bc:             [u8; 4],
    gw:             [u8; 4],
    dns:            [[u8; 4]; 2],
    proxy_port:     c_int,
    hostname:       [c_char; 24],
    email:          [c_char; 64],
    smtp:           [c_char; 31],
    pop3:           [c_char; 31],
    pop3_login:     [c_char; 20],
    pop3_passwd:    [c_char; 32],
    proxy_host:     [c_char; 31],
    ppp_login:      [c_char; 29],
    ppp_passwd:     [c_char; 20],
    out_prefix:     [c_char; 9],
    cw_prefix:      [c_char; 9],
    real_name:      [c_char; 31],
    modem_init:     [c_char; 33],
    area_code:      [c_char; 4],
    ld_prefix:      [c_char; 21],
    p1_areacode:    [c_char; 4],
    phone1:         [c_char; 26],
    p2_areacode:    [c_char; 4],
    phone2:         [c_char; 26],
}

#[link(name = "kallisti")]
extern "C" {
    pub fn flashrom_info(part: c_int, start_out: *mut c_int,
                         size_out: *mut c_int) -> c_int;
    pub fn flashrom_read(offset: c_int, buffer_out: *mut c_void, bytes: c_int) -> c_int;
    pub fn flashrom_write(offset: c_int, buffer: *mut c_void, bytes: c_int) -> c_int;
    pub fn flashrom_delete(offset: c_int) -> c_int;
    pub fn flashrom_get_block(partid: c_int, blockid: c_int,
                              buffer_out: *mut u8) -> c_int;
    pub fn flashrom_get_syscfg(out: *mut flashrom_syscfg_t) -> c_int;
    pub fn flashrom_get_region() -> c_int;
    pub fn flashrom_get_ispcfg(out: *mut flashrom_ispcfg_t) -> c_int;
    pub fn flashrom_get_pw_ispcfg(out: *mut flashrom_ispcfg_t) -> c_int;
}