]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/video/intelfb/intelfbhw.c
[SCSI] qla2xxx: add support for NPIV
[linux-2.6-omap-h63xx.git] / drivers / video / intelfb / intelfbhw.c
index f887f1efd3fef1676201321665651c147668fda7..16bc8d75e36e758ce5ca4b922b5f4e0671c022b7 100644 (file)
@@ -161,7 +161,7 @@ intelfbhw_get_memory(struct pci_dev *pdev, int *aperture_size,
                return 1;
 
        /* Find the bridge device.  It is always 0:0.0 */
-       if (!(bridge_dev = pci_find_slot(0, PCI_DEVFN(0, 0)))) {
+       if (!(bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0)))) {
                ERR_MSG("cannot find bridge device\n");
                return 1;
        }
@@ -169,6 +169,8 @@ intelfbhw_get_memory(struct pci_dev *pdev, int *aperture_size,
        /* Get the fb aperture size and "stolen" memory amount. */
        tmp = 0;
        pci_read_config_word(bridge_dev, INTEL_GMCH_CTRL, &tmp);
+       pci_dev_put(bridge_dev);
+
        switch (pdev->device) {
        case PCI_DEVICE_ID_INTEL_915G:
        case PCI_DEVICE_ID_INTEL_915GM:
@@ -662,7 +664,7 @@ intelfbhw_print_hw_state(struct intelfb_info *dinfo, struct intelfb_hwstate *hw)
        int index = dinfo->pll_index;
        DBG_MSG("intelfbhw_print_hw_state\n");
 
-       if (!hw || !dinfo)
+       if (!hw)
                return;
        /* Read in as much of the HW state as possible. */
        printk("hw state dump start\n");
@@ -1426,6 +1428,24 @@ static void refresh_ring(struct intelfb_info *dinfo);
 static void reset_state(struct intelfb_info *dinfo);
 static void do_flush(struct intelfb_info *dinfo);
 
+static  u32 get_ring_space(struct intelfb_info *dinfo)
+{
+       u32 ring_space;
+
+       if (dinfo->ring_tail >= dinfo->ring_head)
+               ring_space = dinfo->ring.size -
+                       (dinfo->ring_tail - dinfo->ring_head);
+       else
+               ring_space = dinfo->ring_head - dinfo->ring_tail;
+
+       if (ring_space > RING_MIN_FREE)
+               ring_space -= RING_MIN_FREE;
+       else
+               ring_space = 0;
+
+       return ring_space;
+}
+
 static int
 wait_ring(struct intelfb_info *dinfo, int n)
 {
@@ -1440,13 +1460,8 @@ wait_ring(struct intelfb_info *dinfo, int n)
        end = jiffies + (HZ * 3);
        while (dinfo->ring_space < n) {
                dinfo->ring_head = INREG(PRI_RING_HEAD) & RING_HEAD_MASK;
-               if (dinfo->ring_tail + RING_MIN_FREE < dinfo->ring_head)
-                       dinfo->ring_space = dinfo->ring_head
-                               - (dinfo->ring_tail + RING_MIN_FREE);
-               else
-                       dinfo->ring_space = (dinfo->ring.size +
-                                            dinfo->ring_head)
-                               - (dinfo->ring_tail + RING_MIN_FREE);
+               dinfo->ring_space = get_ring_space(dinfo);
+
                if (dinfo->ring_head != last_head) {
                        end = jiffies + (HZ * 3);
                        last_head = dinfo->ring_head;
@@ -1511,12 +1526,7 @@ refresh_ring(struct intelfb_info *dinfo)
 
        dinfo->ring_head = INREG(PRI_RING_HEAD) & RING_HEAD_MASK;
        dinfo->ring_tail = INREG(PRI_RING_TAIL) & RING_TAIL_MASK;
-       if (dinfo->ring_tail + RING_MIN_FREE < dinfo->ring_head)
-               dinfo->ring_space = dinfo->ring_head
-                       - (dinfo->ring_tail + RING_MIN_FREE);
-       else
-               dinfo->ring_space = (dinfo->ring.size + dinfo->ring_head)
-                       - (dinfo->ring_tail + RING_MIN_FREE);
+       dinfo->ring_space = get_ring_space(dinfo);
 }
 
 static void
@@ -1952,7 +1962,7 @@ intelfbhw_cursor_reset(struct intelfb_info *dinfo) {
 }
 
 static irqreturn_t
-intelfbhw_irq(int irq, void *dev_id, struct pt_regs *fp) {
+intelfbhw_irq(int irq, void *dev_id) {
        int handled = 0;
        u16 tmp;
        struct intelfb_info *dinfo = (struct intelfb_info *)dev_id;
@@ -1988,7 +1998,8 @@ int
 intelfbhw_enable_irq(struct intelfb_info *dinfo, int reenable) {
 
        if (!test_and_set_bit(0, &dinfo->irq_flags)) {
-               if (request_irq(dinfo->pdev->irq, intelfbhw_irq, SA_SHIRQ, "intelfb", dinfo)) {
+               if (request_irq(dinfo->pdev->irq, intelfbhw_irq, IRQF_SHARED,
+                    "intelfb", dinfo)) {
                        clear_bit(0, &dinfo->irq_flags);
                        return -EINVAL;
                }