Store PCI addresses and types as 32-bit uints
This commit is contained in:
parent
d86bf47211
commit
f8f9b72588
@ -29,14 +29,36 @@ struct Pci
|
|||||||
*/
|
*/
|
||||||
struct Address
|
struct Address
|
||||||
{
|
{
|
||||||
/** Bus number (0-255). */
|
uint address;
|
||||||
ubyte bus_nr;
|
|
||||||
|
|
||||||
/** Device number (0-31). */
|
this(ubyte bus_nr, ubyte device_nr, ubyte function_nr)
|
||||||
ubyte device_nr;
|
{
|
||||||
|
this.address = (bus_nr << 16u) | (device_nr << 8u) | function_nr;
|
||||||
|
}
|
||||||
|
|
||||||
/** Function number (0-7). */
|
/**
|
||||||
ubyte function_nr;
|
* Bus number (0-255).
|
||||||
|
*/
|
||||||
|
public @property ubyte bus_nr() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)(address >> 16u);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device number (0-31).
|
||||||
|
*/
|
||||||
|
public @property ubyte device_nr() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)(address >> 8u);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function number (0-7).
|
||||||
|
*/
|
||||||
|
public @property ubyte function_nr() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)address;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,14 +66,36 @@ struct Pci
|
|||||||
*/
|
*/
|
||||||
struct Type
|
struct Type
|
||||||
{
|
{
|
||||||
/** Class ID. */
|
uint type;
|
||||||
ubyte class_id;
|
|
||||||
|
|
||||||
/** Subclass ID. */
|
this(ubyte class_id, ubyte subclass_id, ubyte interface_id)
|
||||||
ubyte subclass_id;
|
{
|
||||||
|
this.type = (class_id << 16u) | (subclass_id << 8u) | interface_id;
|
||||||
|
}
|
||||||
|
|
||||||
/** Interface ID. */
|
/**
|
||||||
ubyte interface_id;
|
* Class ID.
|
||||||
|
*/
|
||||||
|
public @property ubyte class_id() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)(type >> 16u);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subclass ID.
|
||||||
|
*/
|
||||||
|
public @property ubyte subclass_id() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)(type >> 8u);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface ID.
|
||||||
|
*/
|
||||||
|
public @property ubyte interface_id() const
|
||||||
|
{
|
||||||
|
return cast(ubyte)type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,9 +113,7 @@ struct Pci
|
|||||||
{
|
{
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
type.class_id = config.class_id;
|
type = Type(config.class_id, config.subclass_id, config.interface_id);
|
||||||
type.subclass_id = config.subclass_id;
|
|
||||||
type.interface_id = config.interface_id;
|
|
||||||
Klog.writefln("Found PCI device %04x:%04x (%02x:%02x:%02x) at %02u:%02u.%u",
|
Klog.writefln("Found PCI device %04x:%04x (%02x:%02x:%02x) at %02u:%02u.%u",
|
||||||
config.vendor_id, config.device_id,
|
config.vendor_id, config.device_id,
|
||||||
type.class_id, type.subclass_id, type.interface_id,
|
type.class_id, type.subclass_id, type.interface_id,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user