Skip to content

Commit

Permalink
MIPS: PS2: ROM: rom_version
Browse files Browse the repository at this point in the history
Signed-off-by: Fredrik Noring <noring@nocrew.org>
  • Loading branch information
frno7 committed May 26, 2019
1 parent ae8d74d commit ab958ab
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
34 changes: 34 additions & 0 deletions arch/mips/include/asm/mach-ps2/rom.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,40 @@ extern struct rom_dir rom1_dir; /* ROM1 directory (DVD) */
ssize_t rom_read_file(const struct rom_dir dir,
const char *name, void *buffer, size_t size, loff_t offset);

/**
* struct rom_ver - ROM version
* @number: ROM version number
* @region: ROM region with 'J' for Japan, 'E' for Europe, 'C' for China,
* and 'A' or 'H' for the USA
* @unknown: unknown member
* @date: date ROM was created
* @date.year: year ROM was created
* @date.month: month ROM was created
* @date.day: day ROM was created
*
* A ROM version is considered to be invalid if @number is zero, in which
* case all members are zero except @region and @unknown that are ``'-'``.
*/
struct rom_ver {
int number;
char region;
char unknown;
struct {
int year;
int month;
int day;
} date;
};

/**
* rom_version - read the ROMVER file in ROM0
*
* Context: any
* Return: ROM version; or, if reading failed, all members zeroed except
* @region and @unknown that are set to ``'-'``
*/
struct rom_ver rom_version(void);

/* The ROM functions below are mainly for internal use. */

/**
Expand Down
16 changes: 15 additions & 1 deletion arch/mips/ps2/rom.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,20 @@ ssize_t rom_read_file(const struct rom_dir dir,
}
EXPORT_SYMBOL_GPL(rom_read_file);

struct rom_ver rom_version(void)
{
struct rom_ver v = { };
char buffer[20] = { };
ssize_t r = rom_read_file(rom0_dir, "ROMVER",
buffer, sizeof(buffer) - 1, 0);

return r > 0 && sscanf(buffer, "%4x%c%c%4d%2d%2d",
&v.number, &v.region, &v.unknown,
&v.date.year, &v.date.month, &v.date.day) == 6 ?
v : (struct rom_ver) { .region = '-', .unknown = '-' };
}
EXPORT_SYMBOL_GPL(rom_version);

/**
* find_reset_string - find the offset to the ``"RESET"`` string, if it exists
* @rom: ROM to search in
Expand Down Expand Up @@ -422,7 +436,7 @@ static int __init ps2_rom_init(void)
rom1_dir = rom_dir_init("rom1", ROM1_BASE, ROM1_SIZE);

v = rom_version();
pr_info("rom0: Version %04d %c %c %04d-%02d-%02d\n",
pr_info("rom0: Version %04x %c %c %04d-%02d-%02d\n",
v.number, v.region, v.unknown,
v.date.year, v.date.month, v.date.day);

Expand Down

0 comments on commit ab958ab

Please sign in to comment.