]> FriiDump Source - friidump.git/blob - libfriidump/disc.h
FriiDump 0.5.3.10: add Redump evidence and optimize Xbox flow
[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
59 /* Functions */
60 FRIIDUMPLIB_EXPORT disc *disc_new (char *dvd_device, u_int32_t command);
61 FRIIDUMPLIB_EXPORT bool disc_init (disc *d, u_int32_t forced_type, u_int32_t sectors_no);
62 FRIIDUMPLIB_EXPORT void *disc_destroy (disc *d);
63 FRIIDUMPLIB_EXPORT int disc_read_sector (disc *d, u_int32_t sector_no, u_int8_t **data, u_int8_t **rawdata);
64 FRIIDUMPLIB_EXPORT bool disc_set_read_method (disc *d, int method);
65 FRIIDUMPLIB_EXPORT void disc_set_unscrambling (disc *d, bool unscramble);
66 FRIIDUMPLIB_EXPORT void disc_set_speed (disc *d, u_int32_t speed);
67 FRIIDUMPLIB_EXPORT void disc_set_streaming_speed (disc *d, u_int32_t speed);
68 FRIIDUMPLIB_EXPORT bool disc_stop_unit (disc *d, bool start);
69 FRIIDUMPLIB_EXPORT void init_range (disc *d, u_int32_t sec_disc, u_int32_t sec_mem);
70 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_scan (disc *d, const char *json_path, const char *dump_prefix);
71 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_subcmd_sweep (disc *d, const char *json_path, const char *dump_prefix);
72 FRIIDUMPLIB_EXPORT bool disc_hlds_e7_memrange_sweep (disc *d, const char *json_path, const char *dump_prefix);
73
74 /* Getters */
75 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sectors_no (disc *d);
76 FRIIDUMPLIB_EXPORT u_int32_t disc_get_layerbreak (disc *d);
77 FRIIDUMPLIB_EXPORT u_int32_t disc_get_command (disc *d);
78 FRIIDUMPLIB_EXPORT u_int32_t disc_get_method (disc *d);
79 FRIIDUMPLIB_EXPORT u_int32_t disc_get_def_method (disc *d);
80 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sec_disc (disc *d);
81 FRIIDUMPLIB_EXPORT u_int32_t disc_get_sec_mem (disc *d);
82
83 FRIIDUMPLIB_EXPORT char *disc_get_type (disc *d, disc_type *dt, char **dt_s);
84 FRIIDUMPLIB_EXPORT char *disc_get_gameid (disc *d, char **gid_s);
85 FRIIDUMPLIB_EXPORT char *disc_get_region (disc *d, disc_region *dr, char **dr_s);
86 FRIIDUMPLIB_EXPORT char *disc_get_maker (disc *d, char **m, char **m_s);
87 FRIIDUMPLIB_EXPORT char *disc_get_version (disc *d, u_int8_t *v, char **v_s);
88 FRIIDUMPLIB_EXPORT char *disc_get_title (disc *d, char **t_s);
89 FRIIDUMPLIB_EXPORT bool disc_get_update (disc *d);
90
91 FRIIDUMPLIB_EXPORT char *disc_get_drive_model_string (disc *d);
92 FRIIDUMPLIB_EXPORT char *disc_get_device (disc *d);
93 FRIIDUMPLIB_EXPORT void *disc_get_native_handle (disc *d);
94 FRIIDUMPLIB_EXPORT bool disc_get_drive_support_status (disc *d);
95 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_profile_name (disc *d);
96 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_support_tier (disc *d);
97 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_family (disc *d);
98 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_tokens (disc *d);
99 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_record_id (disc *d);
100 FRIIDUMPLIB_EXPORT const char *disc_get_hlds_e7_notes (disc *d);
101 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_type (disc *d);
102 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_cache_base (disc *d);
103 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_mem_blocks (disc *d);
104 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_static_cdb_base (disc *d);
105 FRIIDUMPLIB_EXPORT u_int32_t disc_get_hlds_e7_static_gate (disc *d);
106 FRIIDUMPLIB_EXPORT int disc_get_hlds_e7_preferred_method (disc *d);
107
108 /* Xbox/MMC helpers used by Xbox/XGD dump layouts. These dispatch to the
109  * GDR-8050L challenge-table path, the GDR-3120L/Kreon-style FF 08 01
110  * vendor lock-state path, or direct READ(10) for forced experiments. */
111 FRIIDUMPLIB_EXPORT bool disc_is_xbox_unlock_drive (disc *d);
112 FRIIDUMPLIB_EXPORT bool disc_is_xbox_challenge_drive (disc *d);
113 FRIIDUMPLIB_EXPORT bool disc_is_xbox_vendor_unlock_drive (disc *d);
114 FRIIDUMPLIB_EXPORT int disc_xbox_lock (disc *d);
115 FRIIDUMPLIB_EXPORT int disc_xbox_unlock (disc *d);
116 FRIIDUMPLIB_EXPORT int disc_xbox_read_10 (disc *d, u_int32_t sector, u_int32_t sectors, u_int8_t *buf, size_t bufsize);
117 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);
118 FRIIDUMPLIB_EXPORT int disc_xbox_read_capacity_10 (disc *d, u_int32_t *sectors, u_int32_t *sector_size);
119 FRIIDUMPLIB_EXPORT int disc_xbox_recovery_kick (disc *d, bool auth_recovery);
120 FRIIDUMPLIB_EXPORT int disc_xbox_refresh_volume (disc *d);
121 FRIIDUMPLIB_EXPORT int disc_lock_volume (disc *d);
122 FRIIDUMPLIB_EXPORT int disc_refresh_volume (disc *d);
123 FRIIDUMPLIB_EXPORT int disc_xbox_lock_volume (disc *d);
124 FRIIDUMPLIB_EXPORT int disc_xbox_media_cycle (disc *d);
125 FRIIDUMPLIB_EXPORT int disc_xbox_wait_ready (disc *d, unsigned int timeout_ms);
126 FRIIDUMPLIB_EXPORT int disc_media_preflight (disc *d, unsigned int timeout_ms, int *sense_key, int *asc, int *ascq);
127
128 #ifdef __cplusplus
129 }
130 #endif
131
132 #endif