Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / isdn / hardware / eicon / os_pri.c
index 0fafdc1..a296a84 100644 (file)
@@ -18,6 +18,7 @@
 #include "pc_maint.h"
 #include "dsp_tst.h"
 #include "diva_dma.h"
+#include "dsrv_pri.h"
 
 /* --------------------------------------------------------------------------
    OS Dependent part of XDI driver for DIVA PRI Adapter
@@ -283,7 +284,7 @@ static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t * a)
                    && a->resources.pci.addr[bar]) {
                        divasa_unmap_pci_bar(a->resources.pci.addr[bar]);
                        a->resources.pci.bar[bar] = 0;
-                       a->resources.pci.addr[bar] = 0;
+                       a->resources.pci.addr[bar] = NULL;
                }
        }
 
@@ -294,7 +295,7 @@ static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t * a)
        diva_os_cancel_soft_isr(&a->xdi_adapter.req_soft_isr);
 
        diva_os_remove_soft_isr(&a->xdi_adapter.req_soft_isr);
-       a->xdi_adapter.isr_soft_isr.object = 0;
+       a->xdi_adapter.isr_soft_isr.object = NULL;
 
        diva_os_destroy_spin_lock(&a->xdi_adapter.isr_spin_lock, "rm");
        diva_os_destroy_spin_lock(&a->xdi_adapter.data_spin_lock, "rm");
@@ -304,7 +305,7 @@ static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t * a)
         */
        if (a->xdi_adapter.e_tbl) {
                diva_os_free(0, a->xdi_adapter.e_tbl);
-               a->xdi_adapter.e_tbl = 0;
+               a->xdi_adapter.e_tbl = NULL;
        }
        a->xdi_adapter.Channels = 0;
        a->xdi_adapter.e_max = 0;
@@ -316,7 +317,7 @@ static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t * a)
        diva_free_dma_map(a->resources.pci.hdev,
                          (struct _diva_dma_map_entry *) a->xdi_adapter.
                          dma_map);
-       a->xdi_adapter.dma_map = 0;
+       a->xdi_adapter.dma_map = NULL;
 
 
        /*
@@ -332,7 +333,7 @@ static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t * a)
 static int diva_pri_reset_adapter(PISDN_ADAPTER IoAdapter)
 {
        dword i;
-       struct mp_load *boot;
+       struct mp_load __iomem *boot;
 
        if (!IoAdapter->Address || !IoAdapter->reset) {
                return (-1);
@@ -343,7 +344,7 @@ static int diva_pri_reset_adapter(PISDN_ADAPTER IoAdapter)
                return (-1);
        }
 
-       boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
+       boot = (struct mp_load __iomem *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
        WRITE_DWORD(&boot->err, 0);
        DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, boot);
 
@@ -351,7 +352,7 @@ static int diva_pri_reset_adapter(PISDN_ADAPTER IoAdapter)
 
        diva_os_wait(10);
 
-       boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
+       boot = (struct mp_load __iomem *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
        i = READ_DWORD(&boot->live);
 
        diva_os_wait(10);
@@ -408,8 +409,8 @@ diva_pri_write_sdram_block(PISDN_ADAPTER IoAdapter,
                           dword address,
                           const byte * data, dword length, dword limit)
 {
-       byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
-       byte *mem = p;
+       byte __iomem *p = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
+       byte __iomem *mem = p;
 
        if (((address + length) >= limit) || !mem) {
                DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p);
@@ -419,8 +420,9 @@ diva_pri_write_sdram_block(PISDN_ADAPTER IoAdapter,
        }
        mem += address;
 
+       /* memcpy_toio(), maybe? */
        while (length--) {
-               *mem++ = *data++;
+               WRITE_BYTE(mem++, *data++);
        }
 
        DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, p);
@@ -433,8 +435,8 @@ diva_pri_start_adapter(PISDN_ADAPTER IoAdapter,
 {
        dword i;
        int started = 0;
-       byte *p;
-       struct mp_load *boot = (struct mp_load *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
+       byte __iomem *p;
+       struct mp_load __iomem *boot = (struct mp_load __iomem *) DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter);
        ADAPTER *a = &IoAdapter->a;
 
        if (IoAdapter->Initialized) {
@@ -468,7 +470,7 @@ diva_pri_start_adapter(PISDN_ADAPTER IoAdapter,
        }
 
        if (!started) {
-               byte *p = (byte *)boot;
+               byte __iomem *p = (byte __iomem *)boot;
                dword TrapId;
                dword debug;
                TrapId = READ_DWORD(&p[0x80]);
@@ -492,7 +494,7 @@ diva_pri_start_adapter(PISDN_ADAPTER IoAdapter,
         */
        IoAdapter->IrqCount = 0;
        p = DIVA_OS_MEM_ATTACH_CFG(IoAdapter);
-       WRITE_DWORD(((dword volatile *) p), (dword) ~ 0x03E00000);
+       WRITE_DWORD(p, (dword) ~ 0x03E00000);
        DIVA_OS_MEM_DETACH_CFG(IoAdapter, p);
        a->ReadyInt = 1;
        a->ram_out(a, &PR_RAM->ReadyInt, 1);
@@ -576,7 +578,7 @@ static int diva_pri_stop_adapter(diva_os_xdi_adapter_t * a)
 
        if (a->clear_interrupts_proc) {
                diva_pri_clear_interrupts(a);
-               a->clear_interrupts_proc = 0;
+               a->clear_interrupts_proc = NULL;
                DBG_ERR(("A: A(%d) no final interrupt from PRI adapter",
                         IoAdapter->ANum))
        }
@@ -729,15 +731,15 @@ diva_pri_cmd_card_proc(struct _diva_os_xdi_adapter *a,
                                                           a->xdi_mbox.
                                                           data_length);
                                        if (a->xdi_mbox.data) {
-                                               byte *p = DIVA_OS_MEM_ATTACH_ADDRESS(&a->xdi_adapter);
-                                               byte *src = p;
+                                               byte __iomem *p = DIVA_OS_MEM_ATTACH_ADDRESS(&a->xdi_adapter);
+                                               byte __iomem *src = p;
                                                byte *dst = a->xdi_mbox.data;
                                                dword len = a->xdi_mbox.data_length;
 
                                                src += cmd->command_data.read_sdram.offset;
 
                                                while (len--) {
-                                                       *dst++ = *src++;
+                                                       *dst++ = READ_BYTE(src++);
                                                }
                                                a->xdi_mbox.status = DIVA_XDI_MBOX_BUSY;
                                                DIVA_OS_MEM_DETACH_ADDRESS(&a->xdi_adapter, p);
@@ -764,18 +766,20 @@ static int pri_get_serial_number(diva_os_xdi_adapter_t * a)
        byte data[64];
        int i;
        dword len = sizeof(data);
-       volatile byte *config;
-       volatile byte *flash;
+       volatile byte __iomem *config;
+       volatile byte __iomem *flash;
+       byte c;
 
 /*
  *  First set some GT6401x config registers before accessing the BOOT-ROM
  */
        config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter);
-       if (!(config[0xc3c] & 0x08)) {
-               config[0xc3c] |= 0x08;  /* Base Address enable register */
+       c = READ_BYTE(&config[0xc3c]);
+       if (!(c & 0x08)) {
+               WRITE_BYTE(&config[0xc3c], c);  /* Base Address enable register */
        }
-       config[LOW_BOOTCS_DREG] = 0x00;
-       config[HI_BOOTCS_DREG] = 0xFF;
+       WRITE_BYTE(&config[LOW_BOOTCS_DREG], 0x00);
+       WRITE_BYTE(&config[HI_BOOTCS_DREG], 0xFF);
        DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config);
 /*
  *  Read only the last 64 bytes of manufacturing data
@@ -783,13 +787,13 @@ static int pri_get_serial_number(diva_os_xdi_adapter_t * a)
        memset(data, '\0', len);
        flash = DIVA_OS_MEM_ATTACH_PROM(&a->xdi_adapter);
        for (i = 0; i < len; i++) {
-               data[i] = flash[0x8000 - len + i];
+               data[i] = READ_BYTE(&flash[0x8000 - len + i]);
        }
        DIVA_OS_MEM_DETACH_PROM(&a->xdi_adapter, flash);
 
        config = DIVA_OS_MEM_ATTACH_CONFIG(&a->xdi_adapter);
-       config[LOW_BOOTCS_DREG] = 0xFC; /* Disable FLASH EPROM access */
-       config[HI_BOOTCS_DREG] = 0xFF;
+       WRITE_BYTE(&config[LOW_BOOTCS_DREG], 0xFC);     /* Disable FLASH EPROM access */
+       WRITE_BYTE(&config[HI_BOOTCS_DREG], 0xFF);
        DIVA_OS_MEM_DETACH_CONFIG(&a->xdi_adapter, config);
 
        if (memcmp(&data[48], "DIVAserverPR", 12)) {
@@ -905,7 +909,7 @@ void diva_os_prepare_pri_functions(PISDN_ADAPTER IoAdapter)
 **  Checks presence of DSP on board
 */
 static int
-dsp_check_presence(volatile byte * addr, volatile byte * data, int dsp)
+dsp_check_presence(volatile byte __iomem * addr, volatile byte __iomem * data, int dsp)
 {
        word pattern;
 
@@ -950,8 +954,8 @@ dsp_check_presence(volatile byte * addr, volatile byte * data, int dsp)
 */
 static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t * a)
 {
-       byte *base;
-       byte *p;
+       byte __iomem *base;
+       byte __iomem *p;
        dword ret = 0;
        dword row_offset[7] = {
                0x00000000,
@@ -962,7 +966,9 @@ static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t * a)
                0x00000000      /* 5 - ROW 0 */
        };
 
-       byte *dsp_addr_port, *dsp_data_port, row_state;
+       byte __iomem *dsp_addr_port;
+       byte __iomem *dsp_data_port;
+       byte row_state;
        int dsp_row = 0, dsp_index, dsp_num;
 
        if (!a->xdi_adapter.Control || !a->xdi_adapter.reset) {
@@ -970,7 +976,7 @@ static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t * a)
        }
 
        p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter);
-       *(volatile byte *) p = _MP_RISC_RESET | _MP_DSP_RESET;
+       WRITE_BYTE(p, _MP_RISC_RESET | _MP_DSP_RESET);
        DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p);
        diva_os_wait(5);
 
@@ -997,7 +1003,7 @@ static dword diva_pri_detect_dsps(diva_os_xdi_adapter_t * a)
        DIVA_OS_MEM_DETACH_CONTROL(&a->xdi_adapter, base);
 
        p = DIVA_OS_MEM_ATTACH_RESET(&a->xdi_adapter);
-       *(volatile byte *) p = _MP_RISC_RESET | _MP_LED1 | _MP_LED2;
+       WRITE_BYTE(p, _MP_RISC_RESET | _MP_LED1 | _MP_LED2);
        DIVA_OS_MEM_DETACH_RESET(&a->xdi_adapter, p);
        diva_os_wait(5);