|
@@ -727,3 +727,72 @@ alpha_agp_info *
|
|
|
titan_agp_info(void)
|
|
|
{
|
|
|
alpha_agp_info *agp;
|
|
|
+ struct pci_controller *hose;
|
|
|
+ titan_pachip_port *port;
|
|
|
+ int hosenum = -1;
|
|
|
+ union TPAchipPCTL pctl;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Find the AGP port.
|
|
|
+ */
|
|
|
+ port = &TITAN_pachip0->a_port;
|
|
|
+ if (titan_query_agp(port))
|
|
|
+ hosenum = 2;
|
|
|
+ if (hosenum < 0 &&
|
|
|
+ titan_pchip1_present &&
|
|
|
+ titan_query_agp(port = &TITAN_pachip1->a_port))
|
|
|
+ hosenum = 3;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Find the hose the port is on.
|
|
|
+ */
|
|
|
+ for (hose = hose_head; hose; hose = hose->next)
|
|
|
+ if (hose->index == hosenum)
|
|
|
+ break;
|
|
|
+
|
|
|
+ if (!hose || !hose->sg_pci)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Allocate the info structure.
|
|
|
+ */
|
|
|
+ agp = kmalloc(sizeof(*agp), GFP_KERNEL);
|
|
|
+ if (!agp)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Fill it in.
|
|
|
+ */
|
|
|
+ agp->hose = hose;
|
|
|
+ agp->private = port;
|
|
|
+ agp->ops = &titan_agp_ops;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Aperture - not configured until ops.setup().
|
|
|
+ *
|
|
|
+ * FIXME - should we go ahead and allocate it here?
|
|
|
+ */
|
|
|
+ agp->aperture.bus_base = 0;
|
|
|
+ agp->aperture.size = 0;
|
|
|
+ agp->aperture.sysdata = NULL;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Capabilities.
|
|
|
+ */
|
|
|
+ agp->capability.lw = 0;
|
|
|
+ agp->capability.bits.rate = 3; /* 2x, 1x */
|
|
|
+ agp->capability.bits.sba = 1;
|
|
|
+ agp->capability.bits.rq = 7; /* 8 - 1 */
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Mode.
|
|
|
+ */
|
|
|
+ pctl.pctl_q_whole = port->pctl.csr;
|
|
|
+ agp->mode.lw = 0;
|
|
|
+ agp->mode.bits.rate = 1 << pctl.pctl_r_bits.apctl_v_agp_rate;
|
|
|
+ agp->mode.bits.sba = pctl.pctl_r_bits.apctl_v_agp_sba_en;
|
|
|
+ agp->mode.bits.rq = 7; /* RQ Depth? */
|
|
|
+ agp->mode.bits.enable = pctl.pctl_r_bits.apctl_v_agp_en;
|
|
|
+
|
|
|
+ return agp;
|
|
|
+}
|