aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-11-29 09:42:12 +0100
committerKevin O'Connor <kevin@koconnor.net>2010-12-05 12:23:23 -0500
commit54fa8ec148cd7cf9a5d0ac1dcc4f6975b7a1ec6e (patch)
treef53f94423647110d737ba59ae5b2fb463716cf3d
parent0a80608b45acf7df37385241c3305aaedc71f992 (diff)
downloadseabios-54fa8ec148cd7cf9a5d0ac1dcc4f6975b7a1ec6e.tar.gz
ata: make helpers available
Make ata helper functions available outside ata.c, so others (i.e. upcoming ahci support) can use them. Prefix them with ata_ to avoid name clashes. Also don't hard-code buffer size for the model name. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--src/ata.c20
-rw-r--r--src/ata.h2
2 files changed, 13 insertions, 9 deletions
diff --git a/src/ata.c b/src/ata.c
index e9a8df7..7079bf2 100644
--- a/src/ata.c
+++ b/src/ata.c
@@ -701,8 +701,8 @@ send_ata_identity(struct atadrive_s *adrive_g, u16 *buffer, int command)
}
// Extract the ATA/ATAPI version info.
-static int
-extract_version(u16 *buffer)
+int
+ata_extract_version(u16 *buffer)
{
// Extract ATA/ATAPI version.
u16 ataversion = buffer[80];
@@ -716,17 +716,17 @@ extract_version(u16 *buffer)
#define MAXMODEL 40
// Extract the ATA/ATAPI model info.
-static char *
-extract_model(char *model, u16 *buffer)
+char *
+ata_extract_model(char *model, u32 size, u16 *buffer)
{
// Read model name
int i;
- for (i=0; i<MAXMODEL/2; i++)
+ for (i=0; i<size/2; i++)
*(u16*)&model[i*2] = ntohs(buffer[27+i]);
- model[MAXMODEL] = 0x00;
+ model[size] = 0x00;
// Trim trailing spaces from model name.
- for (i=MAXMODEL-1; i>0 && model[i] == 0x20; i--)
+ for (i=size-1; i>0 && model[i] == 0x20; i--)
model[i] = 0x00;
return model;
@@ -773,7 +773,8 @@ init_drive_atapi(struct atadrive_s *dummy, u16 *buffer)
char model[MAXMODEL+1];
snprintf(adrive_g->drive.desc, MAXDESCSIZE, "ata%d-%d: %s ATAPI-%d %s"
, adrive_g->chan_gf->chanid, adrive_g->slave
- , extract_model(model, buffer), extract_version(buffer)
+ , ata_extract_model(model, MAXMODEL, buffer)
+ , ata_extract_version(buffer)
, (iscd ? "DVD/CD" : "Device"));
dprintf(1, "%s\n", adrive_g->drive.desc);
@@ -820,7 +821,8 @@ init_drive_ata(struct atadrive_s *dummy, u16 *buffer)
snprintf(adrive_g->drive.desc, MAXDESCSIZE
, "ata%d-%d: %s ATA-%d Hard-Disk (%u %ciBytes)"
, adrive_g->chan_gf->chanid, adrive_g->slave
- , extract_model(model, buffer), extract_version(buffer)
+ , ata_extract_model(model, MAXMODEL, buffer)
+ , ata_extract_version(buffer)
, (u32)adjsize, adjprefix);
dprintf(1, "%s\n", adrive_g->drive.desc);
diff --git a/src/ata.h b/src/ata.h
index 94f60ee..8fa2872 100644
--- a/src/ata.h
+++ b/src/ata.h
@@ -21,6 +21,8 @@ struct atadrive_s {
};
// ata.c
+char *ata_extract_model(char *model, u32 size, u16 *buffer);
+int ata_extract_version(u16 *buffer);
int cdrom_read(struct disk_op_s *op);
int atapi_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize);
void ata_setup(void);