Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22106368 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Jesse Barnes
Browse files

PCI: PCIe portdrv: Remove struct pcie_port_service_id



The PCI Express port driver uses 'struct pcie_port_service_id' for
matching port service devices and drivers, but this structure
contains fields that duplicate information from the port device
itself (vendor, device, subvendor, subdevice) and fields that are not
used by any existing port service driver (class, class_mask,
drvier_data).  Also, both existing port service drivers (AER and
PCIe HP) don't even use the vendor and device fields for device
matching.  Therefore 'struct pcie_port_service_id' can be removed
altogether and the only useful members of it (port_type, service) can
be introduced directly into the port service device and port service
driver structures.  That simplifies the code quite a bit and reduces
its size.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 0516c8bc
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -67,16 +67,6 @@ static int __init parse_detect_mode(void)
	return PCIEHP_DETECT_DEFAULT;
}

static struct pcie_port_service_id __initdata port_pci_ids[] = {
	{
		.vendor = PCI_ANY_ID,
		.device = PCI_ANY_ID,
		.port_type = PCIE_ANY_PORT,
		.service_type = PCIE_PORT_SERVICE_HP,
		.driver_data =  0,
        }, { /* end: all zeroes */ }
};

static int __initdata dup_slot_id;
static int __initdata acpi_slot_detected;
static struct list_head __initdata dummy_slots = LIST_HEAD_INIT(dummy_slots);
@@ -110,7 +100,8 @@ static int __init dummy_probe(struct pcie_device *dev)

static struct pcie_port_service_driver __initdata dummy_driver = {
        .name           = "pciehp_dummy",
        .id_table       = port_pci_ids,
	.port_type	= PCIE_ANY_PORT,
	.service	= PCIE_PORT_SERVICE_HP,
        .probe          = dummy_probe,
};

+2 −10
Original line number Diff line number Diff line
@@ -505,18 +505,10 @@ static int pciehp_resume (struct pcie_device *dev)
}
#endif

static struct pcie_port_service_id port_pci_ids[] = { {
	.vendor = PCI_ANY_ID,
	.device = PCI_ANY_ID,
	.port_type = PCIE_ANY_PORT,
	.service_type = PCIE_PORT_SERVICE_HP,
	.driver_data =	0,
	}, { /* end: all zeroes */ }
};

static struct pcie_port_service_driver hpdriver_portdrv = {
	.name		= PCIE_MODULE_NAME,
	.id_table	= &port_pci_ids[0],
	.port_type	= PCIE_ANY_PORT,
	.service	= PCIE_PORT_SERVICE_HP,

	.probe		= pciehp_probe,
	.remove		= pciehp_remove,
+2 −14
Original line number Diff line number Diff line
@@ -48,19 +48,6 @@ static pci_ers_result_t aer_error_detected(struct pci_dev *dev,
static void aer_error_resume(struct pci_dev *dev);
static pci_ers_result_t aer_root_reset(struct pci_dev *dev);

/*
 * PCI Express bus's AER Root service driver data structure
 */
static struct pcie_port_service_id aer_id[] = {
	{
	.vendor 	= PCI_ANY_ID,
	.device 	= PCI_ANY_ID,
	.port_type 	= PCIE_RC_PORT,
	.service_type 	= PCIE_PORT_SERVICE_AER,
	},
	{ /* end: all zeroes */ }
};

static struct pci_error_handlers aer_error_handlers = {
	.error_detected = aer_error_detected,
	.resume = aer_error_resume,
@@ -68,7 +55,8 @@ static struct pci_error_handlers aer_error_handlers = {

static struct pcie_port_service_driver aerdriver = {
	.name		= "aer",
	.id_table	= &aer_id[0],
	.port_type	= PCIE_ANY_PORT,
	.service	= PCIE_PORT_SERVICE_AER,

	.probe		= aer_probe,
	.remove		= aer_remove,
+5 −5
Original line number Diff line number Diff line
@@ -351,21 +351,21 @@ static int find_aer_service_iter(struct device *device, void *data)
{
	struct device_driver *driver;
	struct pcie_port_service_driver *service_driver;
	struct pcie_device *pcie_dev;
	struct find_aer_service_data *result;

	result = (struct find_aer_service_data *) data;

	if (device->bus == &pcie_port_bus_type) {
		pcie_dev = to_pcie_device(device);
		if (pcie_dev->id.port_type == PCIE_SW_DOWNSTREAM_PORT)
		struct pcie_port_data *port_data;

		port_data = pci_get_drvdata(to_pcie_device(device)->port);
		if (port_data->port_type == PCIE_SW_DOWNSTREAM_PORT)
			result->is_downstream = 1;

		driver = device->driver;
		if (driver) {
			service_driver = to_service_driver(driver);
			if (service_driver->id_table->service_type ==
					PCIE_PORT_SERVICE_AER) {
			if (service_driver->service == PCIE_PORT_SERVICE_AER) {
				result->aer_driver = service_driver;
				return 1;
			}
+0 −5
Original line number Diff line number Diff line
@@ -28,11 +28,6 @@

#define get_descriptor_id(type, service) (((type - 4) << 4) | service)

struct pcie_port_data {
	int port_type;		/* Type of the port */
	int port_irq_mode;	/* [0:INTx | 1:MSI | 2:MSI-X] */
};

extern struct bus_type pcie_port_bus_type;
extern int pcie_port_device_probe(struct pci_dev *dev);
extern int pcie_port_device_register(struct pci_dev *dev);
Loading