mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-02 13:03:28 +01:00
join same device properties
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
parent
b481378c04
commit
d57b9f1e52
@ -114,10 +114,25 @@ UINT32 pci_config_read32(pci_dt_t *PciDt, UINT8 reg)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT32 PciAddrFromDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevicePath)
|
bool SameDevice(DevPropDevice* D1, DevPropDevice* D2)
|
||||||
{
|
{
|
||||||
return 0;
|
// DBG("paths 1=%u 2=%u\n", D1->num_pci_devpaths, D2->num_pci_devpaths);
|
||||||
|
if (D1->num_pci_devpaths != D2->num_pci_devpaths) return false;
|
||||||
|
for (UINT32 x=0; x < D1->num_pci_devpaths; x++) {
|
||||||
|
// DBG(" funcs 1=%u 2=%u\n", D1->pci_dev_path[x].function, D2->pci_dev_path[x].function);
|
||||||
|
if (D1->pci_dev_path[x].function != D2->pci_dev_path[x].function) return false;
|
||||||
|
// DBG(" devs 1=%u 2=%u\n", D1->pci_dev_path[x].device, D2->pci_dev_path[x].device);
|
||||||
|
if (D1->pci_dev_path[x].device != D2->pci_dev_path[x].device) return false;
|
||||||
|
}
|
||||||
|
DBG("found same device\n");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//UINT32 PciAddrFromDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevicePath)
|
||||||
|
//{
|
||||||
|
// return 0;
|
||||||
|
//}
|
||||||
//Size = GetDevicePathSize (DevicePath);
|
//Size = GetDevicePathSize (DevicePath);
|
||||||
|
|
||||||
//dmazar: replaced by devprop_add_device_pci
|
//dmazar: replaced by devprop_add_device_pci
|
||||||
@ -132,6 +147,9 @@ DevPropDevice *devprop_add_device_pci(DevPropString *StringBuf, pci_dt_t *PciDt,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//просмотреть StringBuf->entries[] в поисках такого же девайса
|
||||||
|
//SameDevice(DevPropDevice* D1, DevPropDevice* D2)
|
||||||
|
|
||||||
if (!DevicePath && (PciDt != 0)) {
|
if (!DevicePath && (PciDt != 0)) {
|
||||||
DevicePath = DevicePathFromHandle(PciDt->DeviceHandle);
|
DevicePath = DevicePathFromHandle(PciDt->DeviceHandle);
|
||||||
}
|
}
|
||||||
@ -171,10 +189,9 @@ DevPropDevice *devprop_add_device_pci(DevPropString *StringBuf, pci_dt_t *PciDt,
|
|||||||
DevicePath = NextDevicePathNode(DevicePath);
|
DevicePath = NextDevicePathNode(DevicePath);
|
||||||
if (DevicePath->Type == HARDWARE_DEVICE_PATH && DevicePath->SubType == HW_PCI_DP) {
|
if (DevicePath->Type == HARDWARE_DEVICE_PATH && DevicePath->SubType == HW_PCI_DP) {
|
||||||
CopyMem(&device->pci_dev_path[NumPaths], DevicePath, sizeof(struct PCIDevPath));
|
CopyMem(&device->pci_dev_path[NumPaths], DevicePath, sizeof(struct PCIDevPath));
|
||||||
DBG("PCI[%d] f=%X, d=%X ", NumPaths, device->pci_dev_path[NumPaths].function, device->pci_dev_path[NumPaths].device);
|
// DBG("PCI[%d] f=%X, d=%X ", NumPaths, device->pci_dev_path[NumPaths].function, device->pci_dev_path[NumPaths].device);
|
||||||
} else {
|
} else {
|
||||||
// not PCI path - break the loop
|
// not PCI path - break the loop
|
||||||
DBG(" break\n");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -195,7 +212,7 @@ DevPropDevice *devprop_add_device_pci(DevPropString *StringBuf, pci_dt_t *PciDt,
|
|||||||
|
|
||||||
device->string = StringBuf;
|
device->string = StringBuf;
|
||||||
device->data = NULL;
|
device->data = NULL;
|
||||||
StringBuf->length += device->length;
|
|
||||||
|
|
||||||
if(!StringBuf->entries) {
|
if(!StringBuf->entries) {
|
||||||
StringBuf->entries = (DevPropDevice**)AllocateZeroPool(MAX_NUM_DEVICES * sizeof(device));
|
StringBuf->entries = (DevPropDevice**)AllocateZeroPool(MAX_NUM_DEVICES * sizeof(device));
|
||||||
@ -205,6 +222,16 @@ DevPropDevice *devprop_add_device_pci(DevPropString *StringBuf, pci_dt_t *PciDt,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DevPropDevice* D1;
|
||||||
|
for (int i=0; i<StringBuf->numentries; i++) {
|
||||||
|
D1 = StringBuf->entries[i];
|
||||||
|
if (SameDevice(D1, device)) {
|
||||||
|
FreePool(device);
|
||||||
|
return D1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuf->length += device->length;
|
||||||
StringBuf->entries[StringBuf->numentries++] = device;
|
StringBuf->entries[StringBuf->numentries++] = device;
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
@ -280,19 +307,6 @@ XBool devprop_add_value(DevPropDevice *device, const XString8& nm, const XBuffer
|
|||||||
return devprop_add_value(device, nm.data(), vl.data(), vl.size());
|
return devprop_add_value(device, nm.data(), vl.data(), vl.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SameDevice(DevPropDevice* D1, DevPropDevice* D2)
|
|
||||||
{
|
|
||||||
// DBG("paths 1=%u 2=%u\n", D1->num_pci_devpaths, D2->num_pci_devpaths);
|
|
||||||
if (D1->num_pci_devpaths != D2->num_pci_devpaths) return false;
|
|
||||||
for (UINT32 x=0; x < D1->num_pci_devpaths; x++) {
|
|
||||||
// DBG(" funcs 1=%u 2=%u\n", D1->pci_dev_path[x].function, D2->pci_dev_path[x].function);
|
|
||||||
if (D1->pci_dev_path[x].function != D2->pci_dev_path[x].function) return false;
|
|
||||||
// DBG(" devs 1=%u 2=%u\n", D1->pci_dev_path[x].device, D2->pci_dev_path[x].device);
|
|
||||||
if (D1->pci_dev_path[x].device != D2->pci_dev_path[x].device) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
XBuffer<char> devprop_generate_string(DevPropString *StringBuf)
|
XBuffer<char> devprop_generate_string(DevPropString *StringBuf)
|
||||||
{
|
{
|
||||||
UINTN len = StringBuf->length * 2;
|
UINTN len = StringBuf->length * 2;
|
||||||
@ -300,7 +314,7 @@ XBuffer<char> devprop_generate_string(DevPropString *StringBuf)
|
|||||||
XBuffer<char> buffer;
|
XBuffer<char> buffer;
|
||||||
buffer.dataSized(len+1);
|
buffer.dataSized(len+1);
|
||||||
|
|
||||||
// DBG("devprop_generate_string\n");
|
// DbgHeader("Devprop Generate String");
|
||||||
|
|
||||||
buffer.S8Catf("%08X%08X%04hX%04hX", SwapBytes32(StringBuf->length), StringBuf->WHAT2, SwapBytes16(StringBuf->numentries), StringBuf->WHAT3);
|
buffer.S8Catf("%08X%08X%04hX%04hX", SwapBytes32(StringBuf->length), StringBuf->WHAT2, SwapBytes16(StringBuf->numentries), StringBuf->WHAT3);
|
||||||
for (int i = 0; i < StringBuf->numentries; i++) {
|
for (int i = 0; i < StringBuf->numentries; i++) {
|
||||||
@ -332,7 +346,7 @@ XBuffer<char> devprop_generate_string(DevPropString *StringBuf)
|
|||||||
}
|
}
|
||||||
//try to find same devices
|
//try to find same devices
|
||||||
for (int j=i+1; j < StringBuf->numentries; j++) {
|
for (int j=i+1; j < StringBuf->numentries; j++) {
|
||||||
if (1 || !SameDevice(StringBuf->entries[i], StringBuf->entries[j])) continue;
|
if (!SameDevice(StringBuf->entries[i], StringBuf->entries[j])) continue;
|
||||||
dataptr = StringBuf->entries[j]->data;
|
dataptr = StringBuf->entries[j]->data;
|
||||||
for (UINT32 x = 0; x < (StringBuf->entries[j]->length) - (24 + (6 * StringBuf->entries[j]->num_pci_devpaths)); x++) {
|
for (UINT32 x = 0; x < (StringBuf->entries[j]->length) - (24 + (6 * StringBuf->entries[j]->num_pci_devpaths)); x++) {
|
||||||
buffer.S8Catf("%02hhX", *dataptr++);
|
buffer.S8Catf("%02hhX", *dataptr++);
|
||||||
|
@ -111,10 +111,10 @@ struct DevPropString {
|
|||||||
typedef struct DevPropString DevPropString;
|
typedef struct DevPropString DevPropString;
|
||||||
|
|
||||||
#ifndef DONT_DEFINE_GLOBALS
|
#ifndef DONT_DEFINE_GLOBALS
|
||||||
extern UINT32 devices_number;
|
extern UINT32 devices_number;
|
||||||
extern DevPropString *device_inject_string;
|
extern DevPropString *device_inject_string;
|
||||||
extern UINT8 *device_inject_stringdata;
|
extern UINT8 *device_inject_stringdata;
|
||||||
extern UINT32 device_inject_stringlength;
|
extern UINT32 device_inject_stringlength;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DevPropString *devprop_create_string(void);
|
DevPropString *devprop_create_string(void);
|
||||||
@ -128,6 +128,6 @@ void devprop_free_string(DevPropString *string);
|
|||||||
XBool set_eth_props(pci_dt_t *eth_dev);
|
XBool set_eth_props(pci_dt_t *eth_dev);
|
||||||
XBool set_usb_props(pci_dt_t *usb_dev);
|
XBool set_usb_props(pci_dt_t *usb_dev);
|
||||||
|
|
||||||
UINT32 PciAddrFromDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevicePath);
|
//UINT32 PciAddrFromDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevicePath);
|
||||||
|
|
||||||
#endif /* !__LIBSAIO_DEVICE_INJECT_H */
|
#endif /* !__LIBSAIO_DEVICE_INJECT_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user