OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [driver/] [pexdrv/] [pexproc.c] - Blame information for rev 44

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
 
2
#include <linux/kernel.h>
3
#define __NO_VERSION__
4
#include <linux/module.h>
5
#include <linux/types.h>
6
#include <linux/ioport.h>
7
#include <linux/pci.h>
8
#include <linux/pagemap.h>
9
#include <linux/interrupt.h>
10
#include <linux/proc_fs.h>
11
#include <asm/io.h>
12
 
13
#include "pexmodule.h"
14
#include "pexproc.h"
15
#include "ambpexregs.h"
16
#include "hardware.h"
17
 
18
//--------------------------------------------------------------------
19
 
20
void pex_register_proc( char *name, void *fptr, void *data )
21
{
22 6 v.karak
    create_proc_read_entry( name, 0, NULL, fptr, data );
23 2 dsmv
}
24
 
25
//--------------------------------------------------------------------
26
 
27
void pex_remove_proc( char *name )
28
{
29 6 v.karak
    remove_proc_entry( name, NULL );
30 2 dsmv
}
31
 
32
//--------------------------------------------------------------------
33
 
34 6 v.karak
int pex_show_capabilities( char *buf, struct pex_device *brd )
35
{
36 33 v.karak
    int i = 0;
37
    int res = 0;
38 6 v.karak
    char *p = buf;
39 33 v.karak
    u8 cap = 0;
40
    u32 cap_id = 0;
41 6 v.karak
 
42 44 v.karak
    struct pci_dev *m_pci = brd->m_pci;
43 43 v.karak
    if(!m_pci) {
44
        goto err_exit;
45
    }
46
 
47 44 v.karak
    if(!buf) {
48
        goto err_exit;
49
    }
50
 
51 6 v.karak
    p += sprintf(p,"\n" );
52
 
53 43 v.karak
    res = pci_read_config_byte(m_pci, 0x34, &cap);
54 6 v.karak
    if(res < 0) {
55
        p += sprintf(p, "  Error read capabilities pointer\n");
56
        goto err_exit;
57
    }
58
 
59 33 v.karak
    p += sprintf(p, "  Capability pointer: 0x%x\n", cap);
60
 
61
    while(1) {
62
 
63 43 v.karak
        res = pci_read_config_dword(m_pci, cap, &cap_id);
64 33 v.karak
        if(res < 0) {
65 6 v.karak
            p += sprintf(p, "  Error read capabilities id\n");
66
            goto err_exit;
67
        }
68 33 v.karak
 
69
        p += sprintf(p, "  Capability ID: 0x%x\n", cap_id);
70
 
71
        if((cap_id & 0xff) == 0x10) {
72
            break;
73
        }
74
 
75
        cap = ((cap_id >> 8) & 0xff);
76
        if(!cap)
77
            break;
78 6 v.karak
    }
79
 
80 33 v.karak
    if((cap_id & 0xff) != 0x10) {
81 6 v.karak
        p += sprintf(p, "  Can't find PCI Express capabilities\n");
82
        goto err_exit;
83
    }
84
 
85 33 v.karak
    p += sprintf(p,"\n" );
86
    p += sprintf(p, "  PCI Express Capability Register Set\n");
87
    p += sprintf(p,"\n" );
88
 
89 6 v.karak
    for(i=0; i<9; i++) {
90 33 v.karak
        u32 reg = 0;
91
        int j = cap + 4*i;
92 43 v.karak
        res = pci_read_config_dword(m_pci, j, &reg);
93 33 v.karak
        if(res < 0) {
94 6 v.karak
            p += sprintf(p, "  Error read capabilities sructure: offset %x\n", j);
95
            goto err_exit;
96
        }
97 33 v.karak
        p += sprintf(p, "  0x%x:  0x%X\n", j, reg);
98 6 v.karak
    }
99
 
100 33 v.karak
err_exit:
101 6 v.karak
 
102
    return (p-buf);
103
}
104
 
105 2 dsmv
int pex_proc_info(  char *buf,
106
                    char **start,
107
                    off_t off,
108
                    int count,
109
                    int *eof,
110
                    void *data )
111
{
112 6 v.karak
    int iBlock = 0;
113
    char *p = buf;
114
    struct pex_device *brd = (struct pex_device*)data;
115 2 dsmv
 
116 6 v.karak
    if(!brd) {
117
        p += sprintf(p,"  Invalid device pointer\n" );
118
        *eof = 1;
119
        return p - buf;
120
    }
121 2 dsmv
 
122 6 v.karak
    p += pex_show_capabilities(p, brd);
123 2 dsmv
 
124 6 v.karak
    p += sprintf(p,"\n" );
125
    p += sprintf(p,"  Device information\n" );
126 2 dsmv
 
127 6 v.karak
    p += sprintf(p, "  m_TotalIRQ = %d\n", atomic_read(&brd->m_TotalIRQ));
128 2 dsmv
 
129
 
130
 
131 6 v.karak
    for(iBlock = 0; iBlock < brd->m_BlockCnt; iBlock++)
132
    {
133
        u32 FifoAddr = 0;
134
        u16 val = 0;
135 2 dsmv
 
136 6 v.karak
        FifoAddr = (iBlock + 1) * PE_FIFO_ADDR;
137
        val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_ID + FifoAddr);
138 2 dsmv
 
139 6 v.karak
        if((val & 0x0FFF) != PE_EXT_FIFO_ID)
140
            continue;
141 2 dsmv
 
142 6 v.karak
        p += sprintf(p,"\n" );
143
        p += sprintf(p,"  PE_EXT_FIFO %d\n", iBlock+1 );
144
        p += sprintf(p,"\n" );
145
 
146
        p += sprintf(p,"  BLOCK_ID = %x\n", (val & 0x0FFF) );
147
        val = ReadOperationWordReg(brd, PEFIFOadr_BLOCK_VER + FifoAddr);
148
        p += sprintf(p,"  BLOCK_VER = %x\n", (val & 0xFFFF) );
149
        val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_ID + FifoAddr);
150
        p += sprintf(p,"  FIFO_ID = %x\n", (val & 0xFFFF) );
151
        val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_NUM + FifoAddr);
152
        p += sprintf(p,"  FIFO_NUMBER = %x\n", (val & 0xFFFF) );
153
        val = ReadOperationWordReg(brd, PEFIFOadr_DMA_SIZE + FifoAddr);
154
        p += sprintf(p,"  RESOURCE = %x\n", (val & 0xFFFF) );
155
        val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_CTRL + FifoAddr);
156
        p += sprintf(p,"  DMA_MODE = %x\n", (val & 0xFFFF) );
157
        val = ReadOperationWordReg(brd, PEFIFOadr_DMA_CTRL + FifoAddr);
158
        p += sprintf(p,"  DMA_CTRL = %x\n", (val & 0xFFFF) );
159
        val = ReadOperationWordReg(brd, PEFIFOadr_FIFO_STATUS + FifoAddr);
160
        p += sprintf(p,"  FIFO_STATUS = %x\n", (val & 0xFFFF) );
161
        val = ReadOperationWordReg(brd, PEFIFOadr_FLAG_CLR + FifoAddr);
162
        p += sprintf(p,"  FLAG_CLR = %x\n", (val & 0xFFFF) );
163
        val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRL + FifoAddr);
164
        p += sprintf(p,"  PCI_ADRL = %x\n", (val & 0xFFFF) );
165
        val = ReadOperationWordReg(brd, PEFIFOadr_PCI_ADDRH + FifoAddr);
166
        p += sprintf(p,"  PCI_ADRH = %x\n", (val & 0xFFFF) );
167
        val = ReadOperationWordReg(brd, PEFIFOadr_LOCAL_ADR + FifoAddr);
168
        p += sprintf(p,"  LOCAL_ADR = %x\n", (val & 0xFFFF) );
169
    }
170
 
171
    *eof = 1;
172
 
173
    return p - buf;
174 2 dsmv
}
175
 
176
//--------------------------------------------------------------------

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.