]>
Commit | Line | Data |
---|---|---|
45516216 | 1 | struct _subtable_data { |
2 | int usecount; | |
3 | }; | |
4 | struct _table_data { | |
5 | unsigned char *table; | |
6 | struct _subtable_data subtable[64]; | |
7 | }; | |
8 | void reallocate_subtable(struct _table_data *tabledata, unsigned char subentry) | |
9 | { | |
10 | unsigned char subindex = subentry - (256 - 64); | |
11 | if (tabledata->subtable[subindex].usecount <= 0) | |
12 | osd_die(); | |
13 | } | |
14 | void release_subtable(struct _table_data *tabledata, unsigned char subentry) | |
15 | { | |
16 | unsigned char subindex = subentry - (256 - 64); | |
17 | if (tabledata->subtable[subindex].usecount <= 0) | |
18 | osd_die(); | |
19 | } | |
20 | void install_mem_handler(int end, char *handler_name) | |
21 | { | |
22 | int lmirrorbits; | |
23 | int hmirrorbits; | |
24 | int lmirrorcount; | |
25 | int hmirrorcount; | |
26 | struct _table_data *tabledata; | |
27 | char prev_entry; | |
28 | int cur_index; | |
29 | int prev_index; | |
30 | for (; hmirrorcount < (1 << hmirrorbits); hmirrorcount++) { | |
31 | int hmirrorbase = 0; | |
32 | if (cur_index == ((end + hmirrorbase) >> (32 - 18))) { | |
33 | if (hmirrorcount != 0 | |
34 | && prev_entry == tabledata->table[cur_index]) { | |
35 | if (tabledata->table[cur_index] >= (256 - 64)) | |
36 | release_subtable(tabledata, | |
37 | tabledata-> | |
38 | table[cur_index]); | |
39 | if (tabledata->table[prev_index] >= (256 - 64)) | |
40 | reallocate_subtable(tabledata, | |
41 | tabledata-> | |
42 | table[prev_index]); | |
43 | } | |
44 | } | |
45 | for (lmirrorcount = 0; | |
46 | lmirrorcount < (1 << lmirrorbits); lmirrorcount++) ; | |
47 | } | |
48 | } |