]> FriiDump Source - friidump.git/blob - libfriidump/disc.h
Fix MSVC CMake SHA1 header resolution
[friidump.git] / libfriidump / disc.h
1 /***************************************************************************
2  *   Copyright (C) 2007 by Arep                                            *
3  *   Support is provided through the forums at                             *
4  *   http://wii.console-tribe.com                                          *
5  *                                                                         *
6  *   This program is free software; you can redistribute it and/or modify  *
7  *   it under the terms of the GNU General Public License as published by  *
8  *   the Free Software Foundation; either version 2 of the License, or     *
9  *   (at your option) any later version.                                   *
10  *                                                                         *
11  *   This program is distributed in the hope that it will be useful,       *
12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14  *   GNU General Public License for more details.                          *
15  *                                                                         *
16  *   You should have received a copy of the GNU General Public License     *
17  *   along with this program; if not, write to the                         *
18  *   Free Software Foundation, Inc.,                                       *
19  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
20  ***************************************************************************/
21
22 #ifndef DISC_H_INCLUDED
23 #define DISC_H_INCLUDED
24
25 #include "misc.h"
26 #include <sys/types.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 typedef enum {
33         DISC_TYPE_GAMECUBE,
34         DISC_TYPE_WII,
35         DISC_TYPE_WII_DL,
36         DISC_TYPE_DVD,
37         DISC_TYPE_XBOX
38 } disc_type;
39
40
41 typedef enum {
42         DISC_REGION_PAL,
43         DISC_REGION_NTSC,
44         DISC_REGION_JAPAN,
45         DISC_REGION_AUSTRALIA,
46         DISC_REGION_FRANCE,
47         DISC_REGION_GERMANY,
48         DISC_REGION_ITALY,
49         DISC_REGION_SPAIN,
50         DISC_REGION_PAL_X,
51         DISC_REGION_PAL_Y,
52         DISC_REGION_UNKNOWN
53 } disc_region;
54
55
56 typedef struct disc_s disc;
57
58 /* Always-available evidence for a failed Nintendo seed/cache read. */
59 typedef struct {
60         bool valid;
61         unsigned int seed_block_index;
62         u_int32_t sector_start;
63         u_int32_t sector_end;
64         int retry;
65         char stage[48];
66         char detail[160];
67         int transport_result;
68         int os_error;
69         int scsi_status;
70         int sense_key;
71         int asc;
72         int ascq;
73         int cdb_length;
74         u_int8_t cdb[12];
75 } disc_seed_diagnostic;
76
77
78 /* Functions */
79 FRIIDUMPLIB_EXPORT disc *disc_new (char *dvd_device, u_int32_t command);
80 FRIIDUMPLIB_EXPORT bool disc_init (disc *d, u_int32_t forced_type, u_int32_t sectors_no);
81 FRIIDUMPLIB_EXPORT void *disc_destroy (disc *d);
82 FRIIDUMPLIB_EXPORT int disc_read_sector (disc *d, u_int32_t sector_no, u_int8_t **data, u_int8_t **rawdata);
83 FRIIDUMPLIB_EXPORT bool disc_set_read_method (disc *d, int method);
84 FRIIDUMPLIB_EXPORT void disc_set_unscrambling (disc *d, bool unscramble);
85 FRIIDUMPLIB_EXPORT void disc_set_speed (disc *d, u_int32_t speed);
86 FRIIDUMPLIB_EXPORT void disc_set_streaming_speed (disc *d, u_int32_t speed);
87 FRIIDUMPLIB_EXPORT bool disc_stop_unit (disc *d, bool start);
88 FRIIDUMPLIB_EXPORT void init_range (disc *d, u_int32_t sec_disc, u_int32_t sec_mem);
89 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_scan (disc *d, const char *json_path, const char *dump_prefix);
90 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_subcmd_sweep (disc *d, const char *json_path, const char *dump_prefix);
91 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_memrange_sweep (disc *d, const char *json_path, const char *dump_prefix);
92
93 /* Getters */
94 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sectors_no (disc *d);
95 FRIIDUMPLIB_EXPORT u_int32_t disc_get_layerbreak (disc *d);
96 FRIIDUMPLIB_EXPORT u_int32_t disc_get_command (disc *d);
97 FRIIDUMPLIB_EXPORT u_int32_t disc_get_method (disc *d);
98 FRIIDUMPLIB_EXPORT u_int32_t disc_get_def_method (disc *d);
99 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sec_disc (disc *d);
100 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sec_mem (disc *d);
101
102 FRIIDUMPLIB_EXPORT char *disc_get_type (disc *d, disc_type *dt, char **dt_s);
103 FRIIDUMPLIB_EXPORT char *disc_get_gameid (disc *d, char **gid_s);
104 FRIIDUMPLIB_EXPORT char *disc_get_region (disc *d, disc_region *dr, char **dr_s);
105 FRIIDUMPLIB_EXPORT char *disc_get_maker (disc *d, char **m, char **m_s);
106 FRIIDUMPLIB_EXPORT char *disc_get_version (disc *d, u_int8_t *v, char **v_s);
107 FRIIDUMPLIB_EXPORT char *disc_get_title (disc *d, char **t_s);
108 FRIIDUMPLIB_EXPORT bool disc_get_update (disc *d);
109
110 FRIIDUMPLIB_EXPORT char *disc_get_drive_vendor (disc *d);
111 FRIIDUMPLIB_EXPORT char *disc_get_drive_product_id (disc *d);
112 FRIIDUMPLIB_EXPORT char *disc_get_drive_firmware_revision (disc *d);
113 FRIIDUMPLIB_EXPORT char *disc_get_drive_model_string (disc *d);
114 FRIIDUMPLIB_EXPORT char *disc_get_device (disc *d);
115 FRIIDUMPLIB_EXPORT void *disc_get_native_handle (disc *d);
116 FRIIDUMPLIB_EXPORT bool disc_get_drive_support_status (disc *d);
117 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_profile_name (disc *d);
118 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_support_tier (disc *d);
119 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_family (disc *d);
120 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_tokens (disc *d);
121 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_record_id (disc *d);
122 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_notes (disc *d);
123 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_type (disc *d);
124 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_cache_base (disc *d);
125 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_mem_blocks (disc *d);
126 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_static_cdb_base (disc *d);
127 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_static_gate (disc *d);
128 FRIIDUMPLIB_EXPORT int disc_get_hlds_e7_preferred_method (disc *d);
129
130 /* Xbox/MMC helpers used by Xbox/XGD dump layouts. These dispatch to the
131  * GDR-8050L challenge-table path, the GDR-3120L/Kreon-style FF 08 01
132  * vendor lock-state path, or direct READ(10) for forced experiments. */
133 FRIIDUMPLIB_EXPORT bool disc_is_xbox_unlock_drive (disc *d);
134 FRIIDUMPLIB_EXPORT bool disc_is_xbox_challenge_drive (disc *d);
135 FRIIDUMPLIB_EXPORT bool disc_is_xbox_vendor_unlock_drive (disc *d);
136 FRIIDUMPLIB_EXPORT int disc_xbox_lock (disc *d);
137 FRIIDUMPLIB_EXPORT int disc_xbox_unlock (disc *d);
138 FRIIDUMPLIB_EXPORT int disc_xbox_read_10 (disc *d, u_int32_t sector, u_int32_t sectors, u_int8_t *buf, size_t bufsize);
139 FRIIDUMPLIB_EXPORT int disc_xbox_read_dvd_structure (disc *d, u_int8_t format, u_int8_t layer, u_int8_t *buf, size_t bufsize);
140 FRIIDUMPLIB_EXPORT int disc_xbox_read_capacity_10 (disc *d, u_int32_t *sectors, u_int32_t *sector_size);
141 FRIIDUMPLIB_EXPORT int disc_xbox_prepare_game_view (disc *d, u_int32_t *sectors, u_int32_t *sector_size);
142 FRIIDUMPLIB_EXPORT int disc_xbox_refresh_volume (disc *d);
143 FRIIDUMPLIB_EXPORT int disc_lock_volume (disc *d);
144 FRIIDUMPLIB_EXPORT int disc_refresh_volume (disc *d);
145 FRIIDUMPLIB_EXPORT int disc_xbox_lock_volume (disc *d);
146 FRIIDUMPLIB_EXPORT int disc_xbox_media_cycle (disc *d);
147 FRIIDUMPLIB_EXPORT int disc_xbox_wait_ready (disc *d, unsigned int timeout_ms);
148 FRIIDUMPLIB_EXPORT int disc_media_preflight (disc *d, unsigned int timeout_ms, int *sense_key, int *asc, int *ascq);
149 FRIIDUMPLIB_EXPORT bool disc_get_seed_diagnostic (disc *d, disc_seed_diagnostic *out);
150
151 #ifdef __cplusplus
152 }
153 #endif
154
155 #endif