Most platforms map the actual drive geometry to the firmware's notion
of geometry. However, some platforms have a more complicated mapping of the firmware values to the actual values. pc98 is the only platform that currently does this. This mapping is necessary for large disks connected to pc98 boxes, as the firmware labels require do special hacks to the actual geometry for interoperability. We cannot do this all in the geom layer because of initialization issues (geom looks for an already initialized pc98 label, but we need the geometry information prior to initialization, classic chicken and egg problem). We pass the disk and the device_t to this function because the geometry mapping depends on what kind of controller is used. This hook allows platforms that want to override things to do so, and has 0 overhead on all other platforms. These patches have been in use locally for a long time, and received good feedback from the pc98 community and sos@ at various times during their development. MFC After: 1 week
This commit is contained in:
parent
850590166f
commit
ab649fd4d2
@ -62,6 +62,14 @@ static disk_strategy_t ad_strategy;
|
||||
static disk_ioctl_t ad_ioctl;
|
||||
static dumper_t ad_dump;
|
||||
|
||||
/*
|
||||
* Most platforms map firmware geom to actual, but some don't. If
|
||||
* not overridden, default to nothing.
|
||||
*/
|
||||
#ifndef ad_firmware_geom_adjust
|
||||
#define ad_firmware_geom_adjust(dev, disk)
|
||||
#endif
|
||||
|
||||
/* local vars */
|
||||
static MALLOC_DEFINE(M_AD, "ad_driver", "ATA disk driver");
|
||||
|
||||
@ -152,6 +160,7 @@ ad_attach(device_t dev)
|
||||
adp->disk->d_unit = device_get_unit(dev);
|
||||
disk_create(adp->disk, DISK_VERSION);
|
||||
device_add_child(dev, "subdisk", device_get_unit(dev));
|
||||
ad_firmware_geom_adjust(dev, adp->disk);
|
||||
bus_generic_attach(dev);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user