// SPDX-License-Identifier: GPL-2.0 /* * Setup routines for AGP 3.5 compliant bridges. */ #include <linux/list.h> #include <linux/pci.h> #include <linux/agp_backend.h> #include <linux/module.h> #include <linux/slab.h> #include "agp.h" /* Generic AGP 3.5 enabling routines */ struct agp_3_5_dev { … }; static void agp_3_5_dev_list_insert(struct list_head *head, struct list_head *new) { … } static void agp_3_5_dev_list_sort(struct agp_3_5_dev *list, unsigned int ndevs) { … } /* * Initialize all isochronous transfer parameters for an AGP 3.0 * node (i.e. a host bridge in combination with the adapters * lying behind it...) */ static int agp_3_5_isochronous_node_enable(struct agp_bridge_data *bridge, struct agp_3_5_dev *dev_list, unsigned int ndevs) { … } /* * This function basically allocates request queue slots among the * AGP 3.0 systems in nonisochronous nodes. The algorithm is * pretty stupid, divide the total number of RQ slots provided by the * target by ndevs. Distribute this many slots to each AGP 3.0 device, * giving any left over slots to the last device in dev_list. */ static void agp_3_5_nonisochronous_node_enable(struct agp_bridge_data *bridge, struct agp_3_5_dev *dev_list, unsigned int ndevs) { … } /* * Fully configure and enable an AGP 3.0 host bridge and all the devices * lying behind it. */ int agp_3_5_enable(struct agp_bridge_data *bridge) { … }